PHP连接和操作MySQL数据库基础教程_php实例
从这里开始
我的博客,后台数据库是什么?没错,就是MySQL,服务器端使用的脚本就是PHP,整个框架使用的是WordPress。PHP和MySQL就像夫妻一样,总是在一起干活。现在这里,就集合PHP,总结一下MySQL的实际使用,也算作是MySQL开发的入门。关于PHP与MySQL的合作,不外乎以下三种方法:
1.mysql扩展;但是目前已经不推荐使用;
2.mysqli扩展;同时提供面向对象风格和面向过程的风格;要求MySQL版本是4.1及以上的;
3.PDO扩展为PHP访问数据库定义了一种轻量级的一致接口;PDO_MYSQL是对其的具体实现。这里暂时只关心开发。由于mysql扩展已经不推荐使用了,我也会与时俱进,不做总结;而mysqli和PDO方式用的比较多,所以这篇将会总结如何使用mysqli扩展来连接数据库服务器,如何查询和获取数据,以及如何执行其它重要任务。下一篇博文将会总结PDO的相关内容。
使用mysqli扩展
先看以下测试数据库db_test中的测试数据:
mysql> select * from tb_test;
+----+-----------+----------+------------+------------+
| id | firstname | lastname | email | phone |
+----+-----------+----------+------------+------------+
| 1 | Young | Jelly | 123@qq.com | 1384532120 |
| 3 | Fang | Jone | 456@qq.com | 1385138913 |
| 4 | Yuan | Su | 789@qq.com | 1385138913 |
+----+-----------+----------+------------+------------+
3 rows in set (0.00 sec)
1.建立和断开连接
与MySQL数据库交互时,首先要建立连接,最后要断开连接;这包括与服务器连接并选择一个数据库,以及最后关闭连接,释放资源。选择使用面向对象接口与MySQL服务器交互,首先需要通过其构造函数实例化mysqli类。
// 实例化mysqli类
$mysqliConn = new mysqli();
// 连接服务器,并选择一个数据库
$mysqliConn->connect('127.0.0.1', 'root', 'root', 'db_test');
printf("MySQL error number:%d", $mysqliConn->errno);
// 或者
// $mysqliConn->connect("http://127.0.0.1", 'root', 'root');
// $mysqliConn->select_db('db_test');
// 与数据库交互
// 关闭连接
$mysqliConn->close();
?>
一旦成功的选择了数据库,然后就可以对这个数据库执行数据库查询了。一旦脚本执行完毕,所有打开的数据库连接都会自动关闭,并释放资源。不过,有可能一个页面在执行期间需要多个数据库连接,各个连接都应当适当的加以关闭。即使只使用一个连接,也应该在脚本的最后将其关闭,这是一种很好的实践方法。在任何情况下,都由close()负责关闭连接。
2.处理连接错误
当然,如果无法连接MySQL数据库,那么不大可能在这个页面继续完成预期的工作了。因此,一定要注意监视连接错误并相应地做出反应。mysqli扩展包包含很多可以用来捕获错误消息的特性,另外也可以使用异常来做到这一点。例如,可以使用mysqli_connect_errno()和mysqli_connect_error()方法诊断并显示一个MySQL连接错误的有关信息。
关于mysqli的具体信息可以在这里查看:http://php.net/manual/zh/book.mysqli.php
与数据库交互
绝大多数查询都与创建、获取、更新和删除任务有关,这些任务统称为CRUD。这里就开始总结CRUD相关的内容。
1.向数据库发送查询
方法query()负责将query发送给数据库。它的定义如下:
mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
可选参数resultmode可以用于修改这个方法的行为,它接受两个可取值。这篇文章总结了二者之间的区别。http://www.jb51.net/article/55792.htm;下面是一个简单的使用例子:
// 实例化mysqli类
$mysqliConn = new mysqli();
// 连接服务器,并选择一个数据库
// 错误的密码
$mysqliConn->connect('127.0.0.1', 'root', 'root', 'db_test');
if ($mysqliConn->connect_error)
{
printf("Unable to connect to the database:%s", $mysqliConn->connect_error);
exit();
}
// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 迭代处理结果集
while (list($firstname, $lastname, $email) = $result->fetch_row())
{
printf("%s %s's email:%s
", $firstname, $lastname, $email);
}
// 关闭连接
$mysqliConn->close();
?>
2.插入、更新和删除数据
插入、更新和删除使用的是insert、update和delete查询完成的,其做法实际上与select查询相同。示例代码如下:
// 实例化mysqli类
$mysqliConn = new mysqli();
// 连接服务器,并选择一个数据库
// 错误的密码
$mysqliConn->connect('127.0.0.1', 'root', 'root', 'db_test');
if ($mysqliConn->connect_error)
{
printf("Unable to connect to the database:%s", $mysqliConn->connect_error);
exit();
}
// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 迭代处理结果集
while (list($firstname, $lastname, $email) = $result->fetch_row())
{
printf("%s %s's email:%s
", $firstname, $lastname, $email);
}
$query = "delete from tb_test where firstname = 'Yuan';";
$result = $mysqliConn->query($query);
// 告诉用户影响了多少行
printf("%d row(s) have been deleted.
", $mysqliConn->affected_rows);
// 重新查询结果集
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 迭代处理结果集
while (list($firstname, $lastname, $email) = $result->fetch_row())
{
printf("%s %s's email:%s
", $firstname, $lastname, $email);
}
// 关闭连接
$mysqliConn->close();
?>
3.释放查询内存
有时可能会获取一个特别庞大的结果集,此时一旦完成处理,很有必要释放该结果集所请求的内存。free()方法可以为我们完成这个任务。例如:
// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 迭代处理结果集
while (list($firstname, $lastname, $email) = $result->fetch_row())
{
printf("%s %s's email:%s
", $firstname, $lastname, $email);
}
$result->free();
4.解析查询结果
一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。
(1)将结果放到对象中
使用fetch_object()方法来完成。fetch_object()方法通常在一个循环中调用,每次调用都使得返回结果集中的下一行被填入一个对象,然后可以按照PHP典型的对象访问语法来访问这个对象。例如:
// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 迭代处理结果集
while ($row = $result->fetch_object())
{
$firstname = $row->firstname;
$lastname = $row->lastname;
$email = $row->email;
}
$result->free();
(2)使用索引数组和关联数组获取结果
mysqli扩展包还允许通过fetch_array()方法和fetch_row()方法分别使用关联数组和索引数组来管理结果集。fetch_array()方法实际上能够将结果集的各行获取为一个关联数组、一个数字索引数组,或者同时包括二者,可以说,fetch_row()是fetch_array的一个子集。默认地,fetch_array()会同时获取关联数组和索引数组,可以在fetch_array中传入参数来修改这个默认行为。
MYSQLI_ASSOC,将行作为一个关联数组返回,键由字段名表示,值由字段内容表示;
MYSQLI_NUM,将行作为一个数字索引数组返回,其元素顺序由查询中指定的字段名顺序决定;
MYSQLI_BOTH,就是默认的选项。
确定所选择的行和受影响的行
通常希望能够确定select查询返回的行数,或者受insert、update或delete影响的行数。
(1)确定返回的行数
如果希望了解select查询语句返回了多少行,num_rows属性很有用。例如:
// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
// 发送查询给MySQL
$result = $mysqliConn->query($query);
// 获取行数
$result->num_rows;
记住,num_rows只在确定select查询所获取的行数时有用,如果要获得受insert、update或delete影响的行数,就要使用下面总结的affected_rows属性。
(2)确定受影响的行数
affected_rows属性用来获取受insert、update或delete影响的行数。代码示例见上面的代码。
执行数据库事务
有3个新方法增强了PHP执行MySQL事务的功能,分别为:
1.autocommit函数,启用自动提交模式;
autocommit()函数控制MySQL自动提交模式的行为,由传入的参数决定启动还是禁用自动提交;传入TRUE,则启动自动提交,传入false则禁用自动提交。无论启用还是禁用,成功时都将返回TRUE,失败时返回FALSE。
2.commit函数,提交事务;将当前事务提交给数据库,成功时返回TRUE,否则返回FALSE。
3.rollback函数,回滚当前事务,成功时返回TRUE,否则返回FALSE。
关于事务,我后面还要继续总结,这里就简要的总结了一下这三个API。
不会结束
这只是MySQL学习的开始,不会结束。再接再励。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,删除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段时,需指定位置以优化查询性能和数据结构;删除字段前需确认操作不可逆;使用在线DDL、备份数据、测试环境和低负载时间段修改表结构是性能优化和最佳实践。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

要安全、彻底地卸载MySQL并清理所有残留文件,需遵循以下步骤:1.停止MySQL服务;2.卸载MySQL软件包;3.清理配置文件和数据目录;4.验证卸载是否彻底。

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显着提升数据库操作效率。

MySQL函数可用于数据处理和计算。1.基本用法包括字符串处理、日期计算和数学运算。2.高级用法涉及结合多个函数实现复杂操作。3.性能优化需避免在WHERE子句中使用函数,并使用GROUPBY和临时表。

在macOS上安装MySQL可以通过以下步骤实现:1.安装Homebrew,使用命令/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。2.更新Homebrew,使用brewupdate。3.安装MySQL,使用brewinstallmysql。4.启动MySQL服务,使用brewservicesstartmysql。安装后,可通过mysql-u

在MySQL中配置字符集和排序规则的方法包括:1.设置服务器级别的字符集和排序规则:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.创建使用特定字符集和排序规则的数据库:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.创建表时指定字符集和排序规则:CREATETABLEexample_table(idINT

使用EXPLAIN命令可以分析MySQL查询的执行计划。1.EXPLAIN命令显示查询的执行计划,帮助找出性能瓶颈。2.执行计划包括id、select_type、table、type、possible_keys、key、key_len、ref、rows和Extra等字段。3.根据执行计划,可以通过添加索引、避免全表扫描、优化JOIN操作和使用覆盖索引来优化查询。
