18.3 PHP操作MySQL数据库的函数
下面介绍PHP操作MySQL数据库所使用的各个函数的含义和使用方法。
18.3.1 通过mysqli类库访问MySQL数据库
PHP操作MySQL数据库是通过PHP的mysqli类库完成的。这个类是PHP专门针对MySQL数据库的扩展接口。
下面以通过Web向user数据库请求数据为例,介绍使用PHP函数处理MySQL数据库数据。
01 在网址主目录下创建phpmysql文件夹。
02 在phpmysql文件夹下建立文件htmlform.html,输入代码如下。
<html> <head> <title>Finding User</title> </head> <body> <h2>Finding users from mysql database.</h2> <form action="formhandler.php" method="post"> Fill user name: <input name="username" type="text" size="20"/> <br /> <input name="submit" type="submit" value="Find"/> </form> </body> </html>
03 在phpmysql文件夹下建立文件formhandler.php,输入代码如下。
<html> <head> <title>User found</title> </head> <body> <h2>User found from mysql database.</h2> <?php $username = $_POST['username']; if(!$username){ echo "Error: There is no data passed."; exit; } if(!get_magic_quotes_gpc()){ $username = addslashes($username); } @ $db = mysqli_connect('localhost','root','753951','adatabase'); if(mysqli_connect_errno()){ echo "Error: Could not connect to mysql database."; exit; } $q = "SELECT * FROM user WHERE name = '".$username."'"; $result = mysqli_query($db,$q); $rownum = mysqli_num_rows($result); for($i=0; $i<$rownum; $i++){ $row = mysqli_fetch_assoc($result); echo "Id:".$row['id']."<br />"; echo "Name:".$row['name']."<br />"; echo "Age:".$row['age']."<br />"; echo "Gender:".$row['gender']."<br />"; echo "Info:".$row['info']."<br />"; } mysqli_free_result($result); mysqli_close($db); ?> </body> </html>
04 运行htmlform.html,结果如图18-3所示。
05 在文本框中输入用户名“lilili”,单击“Find”按钮,页面跳转至formhandler.php,并且返回请求结果,如图18-4所示。
在下面的小节中,将详细分析此案例中所用函数的含义和使用方法。
18.3.2 使用mysqli_connect()函数连接MySQL服务器
PHP使用mysqli_connect()函数连接到MySQL数据库的。
mysqli_connect()函数的格式如下:
mysqli_connect('MySQL服务器地址', '用户名', '用户密码', '要连接的数据库名')
例如:
$db=mysqli_connect('localhost','root','753951','adatabase');
该语句就是通过此函数连接到MySQL数据库并且把此连接生成的对象传递给名为$db的变量,也就是对象$db。其中“MySQL服务器地址”为'localhost',“用户名”为'root',“用户密码”为本环境root设定密码'753951',“要连接的数据库名”为'adatabase'。
默认情况下,MySQL服务的端口号为3360,如果采用默认的端口号,可以不用指定;如果采用了其他的端口号,如采用1066端口,则需要特别指定,例如127.0.0.1:1066,表示MySQL服务于本地机器的1066端口。
提 示
其中localhost换成本地地址或者127.0.0.1,都能实现同样的效果。
18.3.3 使用mysqli_select_db()函数选择数据库文件
连接到数据库以后,就需要选择数据库,只有选择了数据库,才能对数据表进行相关的操作。这里需要使用函数mysqli_select_db()来选择。它的格式为:
mysqli_select_db(数据库服务器连接对象,目标数据库名)
在18.3.1节实例中的$db = mysqli_connect('localhost','root','753951','adatabase');语句已经通过传递参数值'adatabase'确定了需要操作的数据库。如果不传递此参数,mysqli_connect()函数只提供“MYSQL服务器地址”,“用户名”和“用户密码”一样可以连接到MySQL数据库服务器并且以相应的用户登录。如上例的语句变为$db = mysqli_connect('localhost','root','753951');也是成立的。
但是,在这样的情况下,就必须继续选择具体的数据库来进行操作。
如果把上例中的formhandler.php文件中的下面的语句:
@ $db = mysqli_connect('localhost','root','753951','adatabase');
修改为以下两个语句替代:
@ $db = mysqli_connect('localhost','root','753951'); mysqli_select_db($db,'adatabase');
程序运行效果将完全一样。
在新的语句中mysqli_select_db($db,'adatabase');语句确定了“数据库服务器连接对象”为$db,“目标数据库名”为'adatabase'。
18.3.4 使用mysqli_query()函数执行SQL语句
使用mysqli_query()函数执行SQL语句,需要向此函数中传递两个参数,一个是MySQL数据库服务器连接对象,一个是以字符串表示的SQL语句。mysqli_query()函数的格式如下:
mysqli_query(数据库服务器连接对象,SQL语句)
在18.3.1节的实例中mysqli_query($db,$q);语句就表明了“数据库服务器连接对象”为$db,“SQL语句”为$q,而$q用$q = "SELECT * FROM user WHERE name = '".$username."'";语句赋值。
更重要的是mysqli_query()函数执行SQL语句之后会把结果返回。上例中就是返回结果并且赋值给$result变量。
18.3.5 使用mysqli_fetch_assoc ()函数从数组结果集中获取信息
使用mysqli_fetch_assoc()函数从数组结果集中获取信息,只要确定sql请求返回的对象就可以了。
所以$row = mysqli_fetch_assoc($result);语句直接从$result结果中取得一行,并且以关联数组的形式返回给$row。
由于获得的是关联数组,所以在读取数组元素的时候是要通过字段名称确定数组元素的。上例中echo "Id:".$row['id']."<br />";语句就是通过“id”字段名确定数组元素的。
18.3.6 使用mysqli_fetch_object()函数从结果中获取一行作为对象
使用mysqli_fetch_object()函数从结果中获取一行作为对象,同样是确定SQL请求返回的对象就可以了。
把18.3.1节中实例中的程序:
for($i=0; $i<$rownum; $i++){ $row = mysqli_fetch_assoc($result); echo "Id:".$row['id']."<br />"; echo "Name:".$row['name']."<br />"; echo "Age:".$row['age']."<br />"; echo "Gender:".$row['gender']."<br />"; echo "Info:".$row['info']."<br />"; }
修改如下:
for($i=0; $i<$rownum; $i++){ $row = mysqli_fetch_object($result); echo "Id:".$row->id."<br />"; echo "Name:".$row->name."<br />"; echo "Age:".$row->age."<br />"; echo "Gender:".$row->gender."<br />"; echo "Info:".$row->info."<br />"; }
之后,程序的整体运行结果相同。不同的是,修改之后的程序采用了对象和对象属性的表示方法。但是最后输出的数据结果是相同的。
18.3.7 使用mysqli_num_rows()函数获取查询结果集中的记录数
使用mysqli_num_rows()函数获取查询结果包含的数据记录的条数,只需要给出返回的数据对象就可以了。
例如18.3.1节实例中,$rownum = mysqli_num_rows($result);语句查询了$result的记录的条数,并且赋值给$rownum变量。然后程序利用这个条数的数值,实现了一个for循环,遍历所有记录。
18.3.8 使用mysqli_free_result()函数释放资源
释放资源的函数为mysqli_free_result(),函数的格式为:
mysqli_free_result(SQL请求所返回的数据库对象)
在一切操作都基本完成以后,18.3.1节实例中程序通过mysqli_free_result($result);语句释放了SQL请求所返回的对象$result所占用的资源。
18.3.9 使用mysqli_close()函数关闭连接
在连接数据库时,可以使用mysqli_connect()函数。与之相对应,在完成了一次对服务器的使用的情况下,需要关闭此连接,以免对MySQL服务器中数据的误操作和对资源的释放。一个服务器的连接也是一个对象型的数据类型。
mysqli_connect()函数的格式为:
mysqli_connect(需要关闭的数据库连接对象)
在18.3.1节中实例的程序mysqli_close($db);语句关闭了“需要关闭的数据库连接对象”为$db对象。