字体:  

新手学习php总结,孙燕姿来看...呵呵

debiangrub 发表于: 2008-8-20 22:44 来源: PHPChina 开源社区门户

1.mysql_connect("localhost","root","123456")
不想解释了
2.mysql_select_db($dbname,$link)
同上,第一个是数据库名,第二个是连接名
3.查询记录
mysql_query("set names 'gbk'") debiangrub推荐使用
mysql_query($sql)
4.取记录
mysql_fetch_object
mysql_fetch_array
mysql_fetch_rows
object使用rs->name取
array使用rs["name"]取,当是双表查询时,还可用rs["表名.字段名"]具体查询 debiangrub推荐使用!
rows用rs[0]数组下标方式取
5.包含文件使用include和require
include报错程序不终止
require报错并且程序崩溃. debiangrub推荐使用
为防止二级包含可以include_once或require_once

6.库操作
添加:$exec="insert into 表名 (字段,字段) values ('".$_POST['字段']."',".$_POST['字段'].")";
删除:$exec="delete from 表名 where...";
修改:$exec="update 表名 set 字段='".$_POST['字段']."' where ...";
这个实在是不想写,SQL所有语言通用,根本不是问题。
重点提一下类似asp中方括号[]的防表名冲突,键盘最左上角的`(~)键
7.变量传递
_POST["names"],_GET["names"],_REQUEST["names"]
使用.一个点号作为连接符。最后一个包含前两个,第三个不推荐使用 by debiangrub
在变量传递中文的时候必要的地方对其进行转义重编码

8.乱码
把 Apache的default-character-set=ISO-8859-1 改为 default-character-set=utf-8 ,
mysql_query("set names gbk")
9.
10.记录循环读取
在需要循环表格之前条件赋值while ($rs=mysql_fetch_array($result)) {循环内容}
11.输出echo,<?=$dd?>,print,print_r
echo 直接输出,支持输出rs字段值,print同C语言语法%s,print_r输出变量.
12.页跳转
echo "<script>location.href='login.php';</script>";
header("location: index.php");
13.上传文件
form标签里面以下属性enctype="multipart/form-data" 和 <input type="file" name="upload">
$f=&$HTTP_POST_FILES['uplad'];
$uploaddir='uploadfile';//设定上传目录
$path=$uploaddir.'/'.date("ymd")."_".$f['name'];//一般对上传的文件重命名使用时间参考
$r=move_uploaded_file($f['tmp_name'],$path);从上传来的文件由临时目录移动到uploaddir指定的地方
chmod($path, 0777);//文件属性,一般继承权限
14.建库建表
$db = new mysql();//建立mysql对象
$db->connect("localhost","root","123456");建立连接
$sql = "CREATE DATABASE IF NOT EXISTS 'guestbook'";//建库guestbook
db->query($sql);
15.调试变量
在需要的时候比如执行了$row=mysql_fetch_array($re)后,不知道里面有些什么可以用
print_r($row)把它输出看看有什么东西.print_r可以打印数组,对像等平常没办看到的东西.
如果需要输出所有的变量可以用print_r(get_defined_vars());注意这样输出是把所有的包括环境变量一起输出.东西很多,会看得眼花.....要有心里准备,嘿嘿!
16.变量使用
当需要在函数内部使用函数之外的变量时需要先global声明,例如
$sqlserver="localhost";$sqlname="root";$sqlpass="000000";
fucntion getid($id=0) {
//需要先global声明一样,不然会报错.因为这时的数据库连接相当于没有指定内容
global $sqlserver="localhost",$sqlname="root",$sqlpass="000000";
//不global的话相当于mysql_connect( , , )中间内容是空的,因为他们未经赋值
mysql_connect($sqlserver,$sqlname,$sqlpass)
}

by debiangrub
还没想到,想到再加!


原文写于2006年,在博客中国网上。

在php.ini中开启safemode之后
不能再直接用$id来表示.php?id=1或input name=id中提交的参数。
而要分别用取get
$id=$HTTP_GET_VARS['id'];
和取post
$HTTP_POST_VARS['id'];
方式来取得。

(ps.这句话在2006年版中没有哦。后来新出的php5默认特性就是safemode关的,所以网上下载的很老的php程序,或以前的php老教程中的方法都有错。经常会报找不到记录啊,缺少参数啊等的报错。比如这个就很常见
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\php\show.php on line 12
该记录不存在,点击这里返回)

那是因为他在写sql语句的时候一定是直接用select * from tablesname where id=$id
因为打开safemode时是不会自动创建$id,这个$id就相当于是一个没有声明过的变量,不确定的值或为空
这时sql语句相当于是select * from tablesname where id=,它能不报说是没有记录或缺少参数吗?

第二问题还是老生常谈了。就是字符编问题,在金通上班的时候,特意专门去研究了各种编码问题,文件编码了,文件头编码了,http服务器默认发送配置编码了,mysql默认编码了,数据查询时使用的编码了,以前专门写过,再提一下吧。

以上五项必定要统一才能保证每个环节不乱码!不然的话,不是东边乱就是西边乱码。
有空再举一些实例说明吧。也花了不少时间自己去证明各个编码对其他各项显示的影响。三言两语真说不清楚,真的是只可意会。以前光搞asp的文件编码和页面编码和codepage这三项统一都弄死人。现在加到五项。要弄清楚确实不容易。
反正如果是网上下载的老的源码,一般文件编码和页面编码一般没有问题,问题一般是存在于php5和mysql 5的编码上,而mysql5的新特性又居多一些。如果是自己从dw中创建的文件,用
dw cs3以后的版本要注意看一下,默认创建的文件会是uft8的。dw8以及之前的版本默认则是gb2312,还在用dw8或刚转到cs3版的要注意一下啊。

反正一般情况在mysql_db_query或mysql_query这两类语句的上面一行加上mysql_query("set names '编码类型'")
gbk,utf8,gb2312一般都会没有问题的。

------------------------------
2008.8.12更新内容
------------------------------
上文提到的获取参数
$HTTP_GET_VARS['id'];和$_GET['id']
前面的是可以向下兼容的,后面的是php5用的。
看吧。就像<?php?>和<??>的关系一样,前一个比后一个能兼容更的php版本。
---------------------------------------------------
8.12再更新,在文猪的硬盘里面又找到了以前存在服务器里面“部分”东西。真亲切啊。让我有种重拾旧物的感觉,更有种像以前那样半夜三更披着被子在大冬天一人坐在寢室电脑边用810老牛机在开dw的冲动。

----------------------
ps:欢迎sunyanzi来看看啊.呵呵呵......

[ 本帖最后由 debiangrub 于 2008-8-24 00:29 编辑 ]

最新回复

汉化天空 at 2008-8-20 23:01:29
谢谢楼主
提供这么多的经验
debiangrub at 2008-8-21 22:40:44
为什么sunyanzi不来呢.
骑驴觅驴 at 2008-8-21 22:52:02
php5中mysqli和pdo才是被推荐,为了以后考虑,建议还是用pdo来操作数据库
debiangrub at 2008-8-21 23:26:10
pdo什么东东?
ylose at 2008-8-21 23:28:52
看来,我也的把。台式的硬盘也拿来用了。
m35 at 2008-8-21 23:30:29

QUOTE:

上文提到的获取参数
$HTTP_GET_VARS['id'];和$_GET['id']
前面的是可以向下兼容的,后面的是php5用的。
看吧。就像<?php?>和<??>的关系一样,前一个比后一个能兼容更的php版本。
...
$HTTP_GET_VARS等方法已经不推荐使用。
$_GET等方法是在PHP 4.1.0及以后版本使用。
看看手册吧
piaomiao163 at 2008-8-22 00:11:19
孙燕姿?????
debiangrub at 2008-8-22 08:28:24
短时间内还替代不了pdo吧.......那东西没多少人知道啊.


再回楼上的.就是sunyanzi这是孙燕姿的签名啊.你不知道?
kuhanzhu at 2008-8-22 08:45:13
孙燕姿?
她不唱歌了?哇靠,明星都学PHP了?
kuhanzhu at 2008-8-22 08:47:25
3.查询记录
mysql_query("set names 'gbk'") debiangrub推荐使用

这句不是查询记录吧?

另外asp的[]和php的``一样,是防止关键字(保留字)冲突,并非防表名。ASP也提倡:sql="select [id],[title],[content] from [news]"
lihongtao_php at 2008-8-22 08:57:41
我不明白,跟孙燕姿有啥关系?
debiangrub at 2008-8-22 13:13:34
我等啊等啊.顶啊顶........sunyanzi好几天没登录论坛了...顶到她出现啊......
CrossMaya at 2008-8-22 13:24:40
为什么要给她看!!
难道。。。。。孙燕姿  我的美女啊啊啊啊啊啊
debiangrub at 2008-8-22 14:08:38

QUOTE:

原帖由 kuhanzhu 于 2008-8-22 08:47 发表
3.查询记录
mysql_query("set names 'gbk'") debiangrub推荐使用

这句不是查询记录吧?

不是查询是什么?query不就是查询的意思.

另外asp的[]和php的``一样,是防止关键字(保留字)冲突,并非防表名。ASP也提倡:sql="select ,[title],[content] f ...
acumen at 2008-8-22 14:26:46
孙燕姿?
Sunyanzi at 2008-8-22 20:17:07
这几天没来看论坛 ...

这个 ... 为啥要我来看呢 ...?
m35 at 2008-8-22 20:24:49
咦……
ssword at 2008-8-22 21:21:59
我是专门过来看孙燕姿的....
独行之 at 2008-8-22 21:49:07
明星都学PHP了?
debiangrub at 2008-8-23 13:11:35

QUOTE:

原帖由 Sunyanzi 于 2008-8-22 20:17 发表
这几天没来看论坛 ...

这个 ... 为啥要我来看呢 ...?
原因前面说了.我第一次来论坛你是第三个回复我贴的.但前面两个都没有针对问题回.往后推你是第一个解决我问题的.心理上已经把你当作领进门的师付了......
这个......发了东西当然希望你能第一时间看看纠正.........
不知道你上一年级二年级有没有每次考完试,迫不及待的把考卷交上后追问老师自己考卷得分呢?