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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

                   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=@mysqlquery(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=@mysqlquery(query) or die('查询语句出错:'.mysql_error());

while (!!row=mysqlfetcharray(result)) {

echorow[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


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
344
分享
相关文章
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
151 82
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
45 18
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用户完成原始数据的清洗和结构优化,而其零代码迁移能力更实现了历史数据从 TDengine OSS 与 MySQL 到 TDengine 企业版的平滑迁移,全面提升了企业的数据管理效率。本文将详细解读这一实践案例。
31 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
229 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
168 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
169 0
MySQL---数据库从入门走向大神系列(五)-存储过程

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等