PHP执行批量mysql语句

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

当有多条mysql语句连起来需要执行,比如

$sqls= “insert table a values(1,2); insert table a values(2,3);”

需要执行的话php中可以使用的方法有三个:

mysql_query

pdo

mysqli

 

三种方法当sqls语句没有问题的时候都是可以的

 

但是

当sql语句是错误的时候会出现问题

第一条sql错误:三个方法都返回false

第一条sql正确,第二条sql错误:mysql_query、pdo、 mysqli:query也是返回true。所以这个时候你是没法判断你的sqls是否有那条语句是错误的

解决这种办法有几个招

1 解析sql语句

将每条sql都拆分开来执行。这样每个语句分开执行就解决了。但是这种方法多出了好几种方法,所以不可取。

 

2 将sqls语句保存为文本

使用cmd执行命令 mysql…. .< sqls.sql, 然后捕获输出。这也是一种方法,但是感觉是绕着问题走,应该还有更好的方法。

 

3 使用mysqli::multi_query方法

这个方法可以执行多条sql语句,然后使用mysqli::next_result来设置sql的偏移量,使用mysqli::error获取当前偏移的sql的错误状态

 

下面是第三种方法的示例代码

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql  = Config::get( 'sql' );
$content  = file_get_contents ( $sql );
$config  = Config::get( 'config' )
$mysqli  = mysqli_connect( $config [ 'host' ], $config [ 'user' ], $config [ 'password' ], $config [ 'dbname' ]);
$ret  = $mysqli ->multi_query( $content );
if ( $ret  === false) {
     echo  mysqli_error( $mysqli );
}
while  (mysqli_more_results( $mysqli )) {
     if  (mysqli_next_result( $mysqli ) === false) {
         echo  mysqli_error( $mysqli );
         echo  "\r\n" ;
         break ;
     }
}
$mysqli ->close();

这样的话当sqls语句中任意一条有错误的话,程序就会跳出这个错误。

如果你要编写初始化mysql的脚本的话,这招就非常好用了。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
120 0
|
SQL 关系型数据库 MySQL
Mysql PHP 增删改数据记录
Mysql PHP 增删改数据记录
267 0
|
PHP
记录一次php连接mysql8.0失败
记录一次php连接mysql8.0失败
166 0
|
SQL 关系型数据库 MySQL
PHP中MySQL操作
本次使用的demo是MySQL的示例数据库employees,点击下载地址,注意在导入的时候,在employees.sql文件中,将source改成你当前的目录。
PHP中MySQL操作
|
PHP 数据库
PHP 操作数据库
PHP 操作数据库
120 0
|
SQL 关系型数据库 MySQL
php mysql 异步, php mysql 异步并发查询
php mysql 异步, php mysql 异步并发查询
202 0
|
SQL 关系型数据库 MySQL
|
存储 关系型数据库 Linux
|
SQL 关系型数据库 MySQL