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

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. 了解官方手册的大概内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值