PHP 16: MySql的数据库访问
本章介绍PHP访问MySql的方法。
如果你对MySQL不是很清晰,可以参看PHP 17: MySQL的简单介绍。
对于数据库的操作,无非就是以下几个点:
- 如何连接到数据库
- 如何执行SQL
- 如何返回数据结果集
- 如何从结果集取出数据
- 关闭连接
对于MySQL而言,由于其版本不同,访问数据库的方法也不同。PHP4有个MySQL一般的访问方法,过程都是以"mysql_"为前缀的。当到了PHP5,除了它,还扩展了这个方法。并且以2种形式表现,一种是面向对象的,一种是以"mysqli_"开头的过程函数。
以下介绍的将分为面向对象以及过程方法来描述。
建立一个连接
面向对象的连接
我们可以用以下语句来建立MySQL的连接
过程方法的连接
上面对应的过程方法是
在这里需要说明的是mysqli的大多数过程函数都有一个对应的面向接口。通常情况下,过程函数都是以mysqli_开始的,同时需要传入mysqli_connect返回的数据库连接资源。
尝试连接的结果需要检查,万一不成功也好做出相应的处理呀。对于此,可以实用mysqli_connect_errno()来处理。
代码可以如下
@ $db=new mysqli(‘localhost‘,‘root‘,‘password‘,‘mysql‘);
if(mysqli_connect_errno())
{
echo ‘Error: Can not connect to database.‘;
}
else
{
echo ‘Connect to database OK‘;
}
?>
2 @ $db=mysqli_connect(‘localhost‘,‘root‘,‘password‘,‘mysql‘);
3 if(mysqli_connect_errno())
4 {
5 echo ‘Error: Can not connect to database.‘;
6 }
7 else
8 {
9 echo ‘Connect to database OK‘;
10 }
11
12 ?>
选择使用的数据库
在SQL里面,我们可以使用如下SQL来选择数据库
执行SQL语句
要查询数据库,我们可以使用mysql_query()函数,在进行此操作前最好把你的sql建立以下,例如
现在我们可以调用以下的方式来执行SQL语句。
2 $db = new mysqli("localhost", "bm_user", "password", "bookmarks");
3
4 /* check connection */
5 if (mysqli_connect_errno()) {
6 printf("Connect failed: %s\n", mysqli_connect_error());
7 exit();
8 }
9
10
11 /* Create table doesn‘t return a resultset */
12 if ($db->query("CREATE TEMPORARY TABLE mybookmark LIKE bookmark") === TRUE) {
13 printf("Table mybookmark successfully created.\n");
14 }
15 else
16 {
17 echo ‘error<br>‘;
18 }
19
20 $sql="select * from bookmark limit 10";
21 /* Select queries return a resultset */
22 if ($result = $db->query($sql)) {
23 printf("Select returned %d rows.\n", $result->num_rows);
24
25 /* free result set */
26 $result->close();
27 }
28
29 if ($result = $db->query("SELECT * FROM mybookmark", MYSQLI_USE_RESULT)) {
30
31 if ($db->query("SET @a:=‘this will not work‘")) {
32 printf("Error: %s\n", $db->error);
33 }
34 $result->close();
35 }
36
37 $db->close();
38 ?>
39
40
<?php
$db = mysqli_connect("localhost", "bm_user", "password", "bookmarks");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* Create table doesn‘t return a resultset */
if (mysqli_query($db,"CREATE TEMPORARY TABLE mybookmark LIKE bookmark") === TRUE) {
printf("Table mybookmark successfully created.\n");
}
else
{
echo ‘error<br>‘;
}
$sql="select * from bookmark limit 10";
/* Select queries return a resultset */
if ($result = mysqli_query($db,$sql)) {
printf("Select returned %d rows.\n", $result->num_rows);
/* free result set */
mysqli_free_result($result);
}
if ($result = mysqli_query($db,"SELECT * FROM mybookmark", MYSQLI_USE_RESULT)) {
if (mysqli_query($db,"SET @a:=‘this will not work‘")) {
printf("Error: %s\n", $db->error);
}
mysqli_free_result($result);
}
mysqli_close($db);
?>
对查询结果的处理
首先确定结果集的行数。我们可以利用下面的代码实现它。
2 {
3 //Your code here to handle each record.
4
5 }
那么,我想得到每一列值怎么办呢?很简单,调用
除了上面的方法还有没有其他方法得到每一行呢?还有2种方法:
1) 获取每一行的枚举数组
可以为
2) 还有一种方法就是将每行返回到一个对象里。
可以为
$row=$result->fetch_object()
或
断开数据库连接
在前面已经见到了,
结果集的释放:
数据库的关闭:
使用Prepared语句
这个功能有点类似.net SqlParameter.
先举个例子
2 $stmt=$db->prepare($insertSql);
3 $stmt->bind_param($username,$bookmark_url);
4 $stmt->execute();
5 echo $stmt->affected_rows.‘ bookmarks inserted into database.‘;
6 $stmt->close();
line 1,需要注意的是2个问号。表示每个数据的位置。在C#里确实@+列名。
line 2:调用$db->prepare()构建一个需要处理的资源,过程函数是mysqli_stmt_prepare().
line 3:调用stmt->bind_param将相应的值绑定到相应的位置上。过程函数是mysqli_stmt_bind_param.
line 4:执行语句。
需要注意的是,在PHP5RC2版本里,Windows下执行有时会crash掉,但在unix下却运行正常。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。