PHP系列(十一)PHP操作mysql(i)数据库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介:

                   Php操作Mysql数据库】

PHP脚本中操作MySQL数据库的的六个步骤如下:

1.连接MySQL数据库服务器并判断是否连接正确

2.选择数据库

3.设置字符集

4.准备SQL语句并发送SQL语句到MySQL服务器并获取记录集

5.处理结果集

6.释放结果集资源,关闭数据库连接

 

一.PHP连接到MySQL

<?php

//我们全面采用UTF-8 编码。

header('Content-Type:text/html;charset=utf-8');

 

//连接MySQL

$conn = @mysql_connect(DB_HOST,DB_USER,DB_PASSWORD)or die('数据库连接失败!错误信息:'.mysql_error());

 

//数据库连接参数,可以用常量存储,这样就不能修改,更加安全。

define('DB_USER','root');

define('DB_PASSWORD','yangfan');

define('DB_HOST','localhost');

define('DB_NAME' ,'school');

 

//选择你所需要的数据库

@mysql_select_db(DB_NAME) or die('数据库找不到!错误信息:'.mysql_error());

 

//设置字符集,如果是GBK,直接设置SET NAMES GBK 即可

@mysql_query('SET NAMES UTF8') or die('字符集设置错误');

 

//获取记录集

$query = "SELECT * FROM grade";

$result = @mysql_query($query) or die('SQL 语句有误!错误信息:'.mysql_error());

 

//输出一条记录

print_r(mysql_fetch_array($result,MYSQL_ASSOC));

 

//释放结果集资源

mysql_free_result($result);

 

//关闭数据库

mysql_close($conn);

?>

 

二.增删改查

1、新增数据

<?php

$query = "INSERT INTO grade (name,email,point,regdate)VALUE ('王五','yc60.com@gmail.com',,NOW())";

@mysql_query($query) or die('添加数据出错:'.mysql_error());

?>

2、修改数据

<?php

$query = "UPDATE grade SET name='小可爱' WHERE id=6";

@mysql_query($query) or die('修改出错:'.mysql_error());

?>

3、删除数据

<?php

$query = "DELETE FROM grade WHEREid=6";

@mysql_query($query) or die('删除错误:'.mysql_error());

?>

4、显示数据

<?php

$query = "SELECT id,name,email,pointFROM grade";

$result = @mysql_query($query) or die('查询语句出错:'.mysql_error());

while (!!$row = mysql_fetch_array($result)) {

echo$row['id'].'----'.$row['name'].'----'.$row['email'].'----'.$row['point'];

echo '<br />';

}

?>

三.其他常用函数

结果集取出来的函数:

mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组。

mysql_fetch_row() 函数从结果集中取得一行作为索引数组。

mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有

mysql_num_rows()函数返回结果集中行的数目。

mysql_fetch_row():从结果集中取得一行作为枚举数组

mysql_fetch_array() 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

mysql_fetch_lengths () 取得结果集中每个输出的长度

mysql_field_name() 取得结果中指定字段的字段名

mysql_num_rows() 取得结果集中行的数目

mysql_num_fields():取得结果集中字段的数目

mysql_get_client_info() 取得MySQL 客户端信息

mysql_get_host_info() 取得MySQL 主机信息

mysql_get_proto_info() 取得MySQL 协议信息

mysql_get_server_info() 取得MySQL 服务器信息

 

 

php连接 mysqli

PHPmysqli扩展提供了其先行版本的所有功能,此外,由于MySQL已经是一个

具有完整特性的数据库服务器,这为PHP又添加了一些新特性。而mysqli恰恰也支持了

这些新特性。

一.建立和断开连接

MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与mysqli几乎所有的特性一样,这一点可以使用面向对象的方法来完成,也可以采用过程化的方式完成。

1.创建一个mysqli的对象

$_mysqli new mysqli();

 

2.连接MySQL的主机、用户、密码、数据库

$_mysqli->connect('localhost','root','yangfan','guest');

 

3.创建带连接参数的mysqli对象

$_mysqli new mysqli('localhost','root','yangfan','guest');

 

4.单独选择数据库

$_mysqli->select_db('testguest');

 

5.断开MySQL

$_mysqli->close();

 

二.处理连接错误

如果无法连接MySQL数据库,那么这个页面不太可能继续完成预期的工作。因此,一定要注意监视连接错误并相应地做出反应。Mysqli扩展包含有很多特性可以用来捕获错误信息,例如:mysqli_connect_errno()mysqli_connect_error()方法。

mysqli_connect_errno()函数返回连接数据库返回的错误号。

Mysqli_connect_error()函数返回连接数据库返回的错误代码。

 

if (mysqli_connect_errno()) {

echo '数据库连接错误,错误信息:'.mysqli_connect_error();

exit();

}

errno属性返回数据库操作时的错误号。

error属性返回数据库操作时的错误代码。

if ($_mysqli->errno) {

echo '数据库操作时发生错误,错误代码是:'.$_mysqli->error;

}

三.与数据库进行交互

绝大多数查询都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD

1.获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送

SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。

//设置一下编码utf8

$_mysqli->set_charset("utf8");

 

//创建一句SQL语句

$_sql "SELECT * FROM tg_user";

 

//执行sql语句把结果集赋给$_result

$_result $_mysqli->query($_sql);

 

//将结果集的第一行输出

print_r($_result->fetch_row());

 

//释放查询内存(销毁)

$_result->free();

 

2.解析查询结果

一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个

方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。

将结果集放到对象中

由于你可能会使用mysqli的面向对象的语法,所以完全可以采用面向对象的方式管理结果集。可以使用fetch_object()方法来完成。

//将结果集包装成对象

$_row $_reslut->fetch_object();

 

//输出对象中的一个字段(属性)

echo $_row->tg_username;

 

//遍历所有的用户名称

while (!!$_row $_reslut->fetch_object()) {

echo $_row->tg_username.' <br /> ';

}

 

使用索引数组和关联数组

//将结果集包装成数组(索引+关联)

$_row $_reslut->fetch_array();

 

//输出下标是3的字段(属性)

echo $_row[3];

 

//将结果集包装成索引数组

$_row $_reslut->fetch_row();

echo $_row[3];

 

//将结果集包装成关联数组

$_row $_reslut->fetch_assoc();

echo $_row['tg_username'];

 

3.确定所选择的行和受影响的行

通常希望能够确定SELECT查询返回的行数,或者受INSERT、UPDATE或DELET查询影响的行数。我们可以使用num_rows和affected_rows两个属性

//当使用查询时,想了解SELECT查询了多少行,可以使用num_rows。

echo $_reslut->num_rows;

 

//当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$_mysqli下的属性

echo $_mysqli->affected_rows;

 

4.移动指针的操作和获取字段

当你并不想从第一条数据开始获取,或者并不想从第一个字段获取,你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相

关的属性。

//计算有多少条字段

echo $_reslut->field_count;

 

//获取字段的名称

$_field $_reslut->fetch_field();

echo $_field->name;

 

//遍历字段

while (!!$_field $_reslut->fetch_field()) {

echo $_field->name.'<br />';

}

 

//一次性取得字段数组

print_r($_reslut->fetch_fields());

 

//移动数据指针

$_reslut->data_seek(5);

 

//移动字段指针

$_reslut->field_seek(2);

 

5.执行多条SQL语句

有的时候,我们需要在一张页面上同时执行多条SQL语句,之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP提供了执行多条SQL语句

的方法$_mysqli->multi_query();

//创建多条SQL语句

$_sql .= "SELECT * FROM tg_user;";

$_sql .= "SELECT * FROM tg_photo;";

$_sql .= "SELECT * FROM tg_article";

//开始执行多条SQL语句

if ($_mysqli->multi_query($_sql)) {

//开始获取第一条SQL语句的结果集

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

//将结果集指针移到下一个

$_mysqli->next_result();

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

$_mysqli->next_result();

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

} else {

echo 'sql语句有误!';

}

 

6.执行数据库事务

事务(transaction)是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(rollback),该事务所有操作的影响都将取消。首先,您的MySQL是InnoDB或BDB引擎的一种,一般来说,你安装了AppServ的集成

包,你选择InnoDB的引擎的数据库即可。如果你建立的表不是InnoDB,可以在phpmyadmin

里修改。

//首先你必须关闭自动提交数据

$_mysqli->autocommit(false);

//创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败

$_sql .= "UPDATE tg_friend SETtg_state=tg_state+5 WHERE tg_id=1;";

$_sql .= "UPDATE tg_flower SETtg_flower=tg_flower-5 WHERE tg_id=1;";

 

//执行两条SQL语句

if ($_mysqli->multi_query($_sql)) {

//获取第一条SQL一影响的行数

$_success $_mysqli->affected_rows == true false;

//下移,第二条SQL

$_mysqli->next_result();

//获取第二条SQL影响的行数

$_success2 $_mysqli->affected_rows == true false;

//判断是否都正常通过了,两个SQL

if ($_success &&$_success2) {

$_mysqli->commit();

echo '完美提交!';

else {

$_mysqli->rollback();

echo '程序出现异常!';

}

else {

echo "SQL语句有误:".$_mysqli->errno.$_mysqli->error;

}

//最后还必须开启自动提交

$_mysqli->autocommit(true);

 

本文转自 sswqzx 51CTO博客,原文链接:http://blog.51cto.com/sswqzx/1969832


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
466 158
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1112 152
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
857 156
|
6月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
6月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
6月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
410 0
PHP和Mysql前后端交互效果实现
|
SQL 关系型数据库 MySQL
PHP同时连接多个mysql数据库示例代码
PHP同时连接多个mysql数据库示例代码
264 0
|
11月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
516 17
|
12月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
351 18

推荐镜像

更多