目录
- 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 前言
- 为实现网页访问后台数据库的功能,需要在网页代码中将其与对应的数据库进行连接。
- PHP 5 及以上版本建议使用以下方式连接 MySQL :
- MySQLi extension (“i” 意为 improved)。
- PDO (PHP Data Objects)。
- 两种连接方式的比较:
- PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。
- 如果项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 如果使用 MySQLi 连接不同数据库,需要重新编写所有代码,包括查询。
- 两者都是面向对象, 但 MySQLi 还提供了 API 接口。
- 两者都支持预处理语句。 预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。
- 本节以简单的例子介绍实现PHP与SQL连接的全过程,主要介绍 MySQLi 方法。
2 实现PHP连接SQL数据库实验全过程
2.1 实验环境
- 服务端:本实验基于虚拟机win2008系统的WAMP环境进行,该环境相关配置过程参考文章《win2008R2SP1+WAMP环境部署》。
- 客户端:使用浏览器访问与控制。
- 服务端与客户端处于同一个局域网下,开启服务端的phpstudy并确保能从客户端浏览器访问。
2.2 创建数据库
- 在客户端通过浏览器登录phpMyAdmin,位置位于网站默认根目录下的phpMyAdmin文件夹下,在浏览器中输入目标“IP+/phpMyAdmin”进行访问,默认账号密码均为root。
- 登录后可以看到以下界面,左侧是默认的4个数据库。点击箭头所示的数据库,进入。
- 新建学习测试的数据库,命名为my_test,类型选择为“utf8_genrral_ci”,点击创建。
- 创建成功后,在左侧这里可以看到创建后的数据库。点击该数据库进入。
- 进入后可以看到该数据库中没有任何表单。
- 创建一个数据表,命名为users,主要用于存放用户信息(id name password photo money)共5个字段。输入以下信息并点击执行。
- 新建这几个字段,id name password photo money,并设置响应的类型和长度,将id键设为主键。(主键要求非空递增)。
- 可点击左侧新建完成的users表,该表详细结构信息如下图所示。
2.3 插入数据
- 点击SQL进入表格修改界面,可利用SQL语句执行。
- 修改命令如下并点击执行。注意符号为英文格式的。
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);
- 点击左侧的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 总结
- 掌握phpstudy中数据库的操作方式;
- 掌握PHP与MySQL数据库连接和使用;
- 掌握常用命令;
- 了解面向对象与面向过程的连接方式的不同之处;
- 了解官方手册的大概内容。
更多推荐
【PHP基础】实现PHP与SQL数据库的连接
发布评论