在使用php操作mysql之前,需要确定php.ini中是否已经打开mysql的扩展,否则无法使用操作mysql的一些函数。
windows 打开php.ini文件 去掉注释
extension=php_mysql.dll
这里我们使用的是linux, debian5操作系统,默认安装完lamp,都打开了mysql的扩展.
root@10.1.1.200:~# grep "extension=mysql.so" /etc/php5/ -R
/etc/php5/cli/conf.d/mysql.ini:extension=mysql.so
/etc/php5/apache2/conf.d/mysql.ini:extension=mysql.so
/etc/php5/conf.d/mysql.ini:extension=mysql.so
/etc/php5/cgi/conf.d/mysql.ini:extension=mysql.so
开启扩展后,我们就可以使用php操作mysql的一些函数即可连接到数据库.
下面会用到几个mysql函数
1. 连接数据库 mysql_connect(string server,string username,string password)
分别代表mysql数据库服务器地址,mysql数据库用户名,mysql数据库密码,注意函数返回的是连接的资源集.
2 . 选择具体的库 mysql_select_db(string database_name[,resource link_indentifier])
第一个参数是具体要操作的数据库的名称,第二个参数是可省略的连接返回的资源集.
3. 设置数据库编码 mysql_query(string query[,resource link_indentifier])
第一个参数是需要去执行的sql语句,第二个参数是可省略的连接返回的资源集.mysql_query函数仅对select,show,explain,describe语句返回一个资源标识符,如果查询执行不正确则返回false,对于其他类型的sql语句,mysql_query()函数在执行成功时返回true,出错时返回false.
实例使用php操作mysql数据库
首先在mysql中创建test库,user表,并插入了些数据
mysql> select * from user;
+----+----------+----------+-----------------------+
| id | username | pwd | cmail |
+----+----------+----------+-----------------------+
| 1 | davehe | password | davehe163@163.com |
| 2 | emily | password | liuli@qq.com |
| 3 | lili | password | lili@qq.com |
+----+----------+----------+-----------------------+
3 rows in set (0.00 sec)
php连接数据库
<?php
mysql_connect("localhost","root","password") or die("数据库链接错误");
mysql_select_db("test");
mysql_query("set names 'UTF8'");
$sql="select * from ’user‘";
$query=mysql_query($sql);
echo $query;
?>
发现$qeury屏幕一直未有输出结果,由此判断问题应该出在$query处,也就是mysql_query()有问题,这时可以在里面加条判断语句(mysql_error() 该函数返回上一个mysql函数的错误文本,如果没有出错则返回''空字符串)
<?php
mysql_connect("localhost","root","hc1226") or die("数据库链接错误");
mysql_select_db("test");
mysql_query("set names 'UTF8'");
$sql="select * from 'user'";
$query=mysql_query($sql);
if(!$query){
die(mysql_error());
exit;
}
?>
这是访问该页看到提示报错报错信息 :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user'' at line 1
才发现问题出在$sql语句问题,user表名上应该用`符号而不是'符号
更改后执行显示正常,select语句返回的是一个资源集合,在php中直接输出资源集是没有作用的,$query输出的是一个资源标示符号.
Resource id #3
要操作这个资源集需要用到mysql_fetch_array()或者mysql_fetch_row()函数.这2个函数每执行一次都将从资源中取出一条记录放入一个数组中,并且内部数据指针自动指向下一条数据,要取出所有数据就需要借助while循环;2者区别在于:mysql_fetch_array()函数取得的数据返回的数组中同时存在数据下标以及以字段名命名的键名的数据,而mysql_fetch_row()函数取的数据只有数组下标.
这2个函数的参数都为查询返回的资源集,如上例的$query
下面分别用这2个函数查看最终返回数据的结果:
使用mysql_fetch_array()函数
<?php
mysql_connect("localhost","root","hc1226") or die("数据库链接错误");
mysql_select_db("test");
mysql_query("set names 'UTF8'");
$sql="select * from `user`";
$query=mysql_query($sql);
if(!$query){
die(mysql_error());
exit;
}
echo $query;
echo "<hr />";
while($rs=mysql_fetch_array($query)){
$result[]=$rs;
}
print_r($result);
?>
页面输出如下:
Resource id #3<hr />Array
(
[0] => Array
(
[0] => 1
[id] => 1
[1] => davehe
[username] => davehe
[2] => password
[pwd] => password
[3] => davehemail163@163.com
[cmail] => davehemail163@163.com
)
[1] => Array
(
[0] => 2
[id] => 2
[1] => emily
[username] => emily
[2] => password
[pwd] => password
[3] => liulili@qq.com
[cmail] => liuli@qq.com
)
[2] => Array
(
[0] => 3
[id] => 3
[1] => lili
[username] => lili
[2] => password
[pwd] => password
[3] => lili@qq.com
[cmail] => lili@qq.com
)
)
使用mysql_fetch_row()函数:
Resource id #3<hr />Array
(
[0] => Array
(
[0] => 1
[1] => davehe
[2] => password
[3] => davehemail163@163.com
)
[1] => Array
(
[0] => 2
[1] => emily
[2] => password
[3] => liuli@qq.com
)
[2] => Array
(
[0] => 3
[1] => lili
[2] => password
[3] => lili@qq.com
)
)
其他常用函数
int mysql_num_rows(resource result); 返回当次查询以供查询了多少条数据
mysql_close(); 函数用来关闭数据库连接,成功返回true,失败返回false
php使用mysqli连接数据库
什么是mysqli,它扩展允许使用2种方式操作mysql数据库:面向过程模式和面向对象模式.这里主要讲来使用mysqli的面向对象模式操作数据库.这里装完lamp,也默认打开了mysqli的扩展
root@10.1.1.200:~# grep "extension=mysqli.so" /etc/php5/ -R
/etc/php5/cli/conf.d/mysqli.ini:extension=mysqli.so
/etc/php5/apache2/conf.d/mysqli.ini:extension=mysqli.so
/etc/php5/conf.d/mysqli.ini:extension=mysqli.so
/etc/php5/cgi/conf.d/mysqli.ini:extension=mysqli.so
在面向对象方式中,mysqli被封装成一个类,要使用这个类必须先实例化该类.连接数据库使用的是mysqli中的connect()方法.
$db->connect(主机,用户,密码,数据库名);
$db->query(string $query); query()和mysql中的mysql_query()一样,都是用来执行sql语句.当使用select,show,explain,describe语句返回的是mysqli_result对象.
$result->num_rows;相当于mysql_num_rows()函数.
$result->fetch_array();这个方法和mysql_fetch_array()一样.
$result->fetch_row();该方法同fetch_array()相似,不同它只返回数组中只有下标.
$result->free();当所有的操作执行完成后,也需要将数据库连接关闭.清空查询的结果,释放内存空间
$db->close(); 关闭数据库连接
下面使用mysqli操作mysql数据库
<?php
$db=new mysqli();
$db->connect("localhost","root","pasword","test");
$sql="select * from `user`";
//$sql="insert into `user`(id,username,pwd,cmail) values(3,'lili','password','lili@qq.com')";
$result=$db->query($sql);
echo "本次一共查询了".$result->num_rows."条数据"."<br/>";
while($rs=$result->fetch_array()){
echo "id:".$rs['id']."username:".$rs['username']."<hr />";
}
$result->free();
$db->close();
?>
页面输出结果:
本次一共查询了3条数据
id:1username:davehe
id:2username:emily
id:3username:lili