目录

  • 1 前言
  • 2 实现PHP连接SQL数据库实验全过程
    • 2.1 实验环境
    • 2.2 创建数据库
    • 2.3 插入数据
    • 2.4 实现PHP与数据库交互
      • 2.4.1 实现PHP与数据库交互三步走
      • 2.4.2 代码一:简单实现三步走
      • 2.4.3 代码二:优化代码一
      • 2.4.4 代码三:改连接方式为面向对象
  • 3 相关函数简介
    • 3.1 数据库连接操作相关函数
    • 3.2 操作结果集对象相关函数
    • 3.3 更多命令
  • 4 总结

1 前言

  1. 为实现网页访问后台数据库的功能,需要在网页代码中将其与对应的数据库进行连接。
  2. PHP 5 及以上版本建议使用以下方式连接 MySQL :
    1. MySQLi extension (“i” 意为 improved)。
    2. PDO (PHP Data Objects)。
  3. 两种连接方式的比较:
    1. PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。
    2. 如果项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 如果使用 MySQLi 连接不同数据库,需要重新编写所有代码,包括查询。
    3. 两者都是面向对象, 但 MySQLi 还提供了 API 接口。
    4. 两者都支持预处理语句。 预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。
  4. 本节以简单的例子介绍实现PHP与SQL连接的全过程,主要介绍 MySQLi 方法。

2 实现PHP连接SQL数据库实验全过程

2.1 实验环境

  1. 服务端:本实验基于虚拟机win2008系统的WAMP环境进行,该环境相关配置过程参考文章《win2008R2SP1+WAMP环境部署》。
  2. 客户端:使用浏览器访问与控制。
  3. 服务端与客户端处于同一个局域网下,开启服务端的phpstudy并确保能从客户端浏览器访问。

2.2 创建数据库

  1. 在客户端通过浏览器登录phpMyAdmin,位置位于网站默认根目录下的phpMyAdmin文件夹下,在浏览器中输入目标“IP+/phpMyAdmin”进行访问,默认账号密码均为root。
  2. 登录后可以看到以下界面,左侧是默认的4个数据库。点击箭头所示的数据库,进入。
  3. 新建学习测试的数据库,命名为my_test,类型选择为“utf8_genrral_ci”,点击创建。
  4. 创建成功后,在左侧这里可以看到创建后的数据库。点击该数据库进入。
  5. 进入后可以看到该数据库中没有任何表单。
  6. 创建一个数据表,命名为users,主要用于存放用户信息(id name password photo money)共5个字段。输入以下信息并点击执行。
  7. 新建这几个字段,id name password photo money,并设置响应的类型和长度,将id键设为主键。(主键要求非空递增)。
  8. 可点击左侧新建完成的users表,该表详细结构信息如下图所示。

2.3 插入数据

  1. 点击SQL进入表格修改界面,可利用SQL语句执行。
  2. 修改命令如下并点击执行。注意符号为英文格式的。
INSERT INTO `users`( `name`, `password`,`photo`, `money`) VALUES ("libai",123456,"./touxiang.jpg",100);
INSERT INTO `users`( `name`, `password`,`photo`, `money`) VALUES ("李白",123456,"./touxiang.jpg",100);
  1. 点击左侧的users表,可以看到我们输入的用户信息。此处我们输入了libai和李白两个账户,如下图所示。

2.4 实现PHP与数据库交互

2.4.1 实现PHP与数据库交互三步走

1. 建立连接。用户建立连接时,需要提供用户名+密码+地址+数据库名,其中数据库名在连接过程中可以切换。
2. 执行SQL语句。 
3. 断开连接。

2.4.2 代码一:简单实现三步走

简单实现交互三部走,并根据是否成功建立连接反馈信息。访问该网页可得到结果

<?php
$dbHost = "127.0.0.1";	//数据库地址
$dbUser = "root";		//此处直接赋值为root,实际使用应该是用户登录输入自己的账号。
$dbPass = "root";		//此处直接赋值为root,实际使用应该是用户登录输入自己的密码。
$dbName = "my_test";
$link = @mysqli_connect($$dbHost,$dbUser,$dbPass,$dbName);//建立连接,不显示notice信息
if (!$link)
	{echo mysqli_connect_error();}		//如果未能建立连接则显示错误信息。
$sql = "select * from users";			//定义要执行的语句。
$results = mysqli_query($link,$sql);	//执行语句从连接获取数据。
var_dump($results);						//查看所获取数据的类型。
//网页输出为对象类型:object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(5) ["lengths"]=> NULL ["num_rows"]=> int(2) ["type"]=> int(0) }
mysqli_close($link);					//断开连接
?>

2.4.3 代码二:优化代码一

在代码一的基础上,根据是否成功执行语句获取数据分支执行,若成功则依次打印所获取数据信息,若是被则显示错误提示。浏览器访问代码二结果如图,其中中文出现乱码。

<?php
$dbHost = "127.0.0.1";
$dbUser = "root";
$dbPass = "root";
$dbName = "my_test";
$link = @mysqli_connect($$dbHost,$dbUser,$dbPass,$dbName);
if (!$link)
	{echo mysqli_connect_error();}
$sql = "select * from users";
if ($results = mysqli_query($link,$sql)){			//mysqli_query函数执行失败时返回 false,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回true。
	while ($result = mysqli_fetch_assoc($results)){	//使用mysqli_fetch_assoc函数获取返回对象中的具体数据。
		var_dump($result);
		echo "<hr/>";
	}
}
else{
	die(mysqli_error($link));
}
mysqli_close($link);
?>

2.4.4 代码三:改连接方式为面向对象

面向对象的连接方式与代码一二中的面向过程的主要区别在于,连接过程、判断过程、断开过程的差异。在数据访问和使用过程是基本一致的。

<?php
$dbHost = "127.0.0.1";
$dbUser = "root";
$dbPass = "root";
$dbName = "my_test";
$link = @new mysqli($$dbHost,$dbUser,$dbPass,$dbName);
if ($link->connect_error)	
	{echo $mysqli->connect_error;}
$sql = "select * from users";
if ($results = mysqli_query($link,$sql)){			//mysqli_query函数执行失败时返回 false,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回true。
	while ($result = mysqli_fetch_assoc($results)){	//使用mysqli_fetch_assoc函数获取返回对象中的具体数据。
		var_dump($result);
		echo "<hr/>";
	}
}
else{
	die(mysqli_error($link));
}
$link->close();
?>

3 相关函数简介

3.1 数据库连接操作相关函数

函数名作用
new mysqli()
mysqli_connect()
连接指定数据库
$mysqli->connect_errno
mysqli_connect_errno()
返回最后一次连接调用的错误代码
$mysqli->connect_error
mysqli_connect_error()
返回一个字符串描述的最后一次连接调用的错误代码
$link->close()
mysqli_close($link)
断开连接,其中$link表示所建立的连接。

3.2 操作结果集对象相关函数

函数作用
mysqli_fetch_row()以索引数组的方式获取一条记录的数据
mysqli_fetch_assoc()以关联数组的方式获取一条记录的数据
mysqli_fetch_array()以索引数组或关联数组的方式获取一条记录的数据
mysqli_fetch_all()以索引属猪或关联数组的方式获取全部记录的数据
mysqli_num_rows()获取结果中行的数量
mysqli_free_result()释放与一个结果集合相关的内存

3.3 更多命令

更多命令请参考官方手册《MySQL增强版扩展》。

4 总结

  1. 掌握phpstudy中数据库的操作方式;
  2. 掌握PHP与MySQL数据库连接和使用;
  3. 掌握常用命令;
  4. 了解面向对象与面向过程的连接方式的不同之处;
  5. 了解官方手册的大概内容。

更多推荐

【PHP基础】实现PHP与SQL数据库的连接