最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行多条语句的问题了。软件在CodeIgniter框架上开发的,CodeIgniter有封装好的执行sql语句的函数:$this->db->query('****'),但此函数一次只能执行一条sql语句。所以得另外想办法了。百度了下,找到了一些资料。multi_query()方法是完全按照在sql环境下的语句执行,所以可以一次执行多条sql语句(按sql语法拼写,每条语句以;结束)。

 $mysqli = new mysqli($this->db->hostname,$this->db->username,$this->db->password,$this->db->database);   //连接MySQL数据库
if ($mysqli->connect_errno) { //判断是否连接成功
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
} $mysqli->multi_query($dataStr); //执行sql语句

以下是百度到的参考资料:

使用mysqli对象中的query()方法每次调用只能执行一条SQL命令。如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_query()方法。具体做法是把多条SQL命令写在同一个字符串里作为参数传递给multi_query()方法,多条SQL之间使用分号 (;)分隔。如果第一条SQL命令在执行时没有出错,这个方法就会返回TRUE,否则将返回FALSE。

因为multi_query()方法能够连接执行一个或多个查询,而每条SQL命令都可能返回一个结果,在必要时需要获取每一个结果集。所以对该方 法返回结果的处理也有了一些变化,第一条查询命令的结果要用mysqli对象中的use_result()或store_result()方法来读取,当 然,使用store_result()方法将全部结果立刻取回到客户端,这种做法效率更高。另外,可以用mysqli对象中的 more_results()方法检查是否还有其他结果集。如果想对下一个结果集进行处理,应该调用mysqli对象中的next_result()方 法,获取下一个结果集。这个方法返回TRUE(有下一个结果)或FALSE。如果有下一个结果集,也需要使用use_result()或 store_result()方法来读取。执行多条SQL命令代码如下所示:

<?php
$mysqli = new mysqli("localhost", "mysql_user","mysql_pwd", "demo"); //连接MySQL数据库
if (mysqli_connect_errno()) {
   //检查连接错误
printf("连接失败: %s<br>", mysqli_connect_error());
exit();
} /* 将三条SQL命令使用分号(;)分隔, 连接成一个字符串 */ //设置查询字符集为GB2312
$query = "SET NAMES GB2312;"; //从MySQL服务器获取当前用户
$query .= "SELECT CURRENT_USER();"; //从contactinfo表中读取数据
$query .= "SELECT name,phone FROM contactinfo LIMIT 0,2"; //执行多条SQL命令
if ($mysqli->multi_query($query)) { do {
//获取第一个结果集
if ($result = $mysqli->store_result()) {
//遍历结果集中每条记录
while ($row = $result->fetch_row()) {
//从一行记录数组中获取每列数据
foreach($row as $data){
//输出每列数据
echo $data."&nbsp;&nbsp;"; }
//输出换行符号
echo "<br>";
}
//关闭一个打开的结果集
$result->close(); }
//判断是否还有更多的结果集
if ($mysqli->more_results()) {
//输出一行分隔线
echo "-----------------<br>"; }
} while ($mysqli->next_result()); //获取下一个结果集,并继续执行循环 }
$mysqli->close(); //关闭mysqli连接 ?>

输出结果如下所示:

  1. mysql_user@localhost
  2. -----------------
  3. 高某某   15801688338
  4. 洛某某   15801681234

在上面的示例程序中,使用mysqli对象中的multi_query()方法一次执行三条SQL命令,获取多个结果集并从中遍历数据。如果在命令 的处理过程中发生了错误,multi_query()和next_result()方法就会出现问题。multi_query()方法的返回值,以及 mysqli的属性errno、error、info等只与第一条SQL命令有关,无法判断第二条及以后的命令是否在执行时发生了错误。所以在执行 multi_query()方法的返回值是TRUE时,并不意味着后续命令在执行时没有出错。

mysql -- 一次执行多条sql语句的更多相关文章

  1. Jmeter连接MySQL配置(能执行多条sql语句)

    Database URL为MySQL的连接串,如果要执行多条SQL语句,后面还要添加“?allowMultiQueries=true”

  2. MyBatis一次执行多条SQL语句

    MyBatis一次执行多条SQL语句 有个常见的场景:删除用户的时候需要先删除用户的外键关联数据,否则会触发规则报错. 解决办法不外乎有三个:1.多条sql分批执行:2.存储过程或函数调用:3.sql ...

  3. java执行多条SQL语句

    一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建Databa ...

  4. jmert jdbc request支持执行多条sql语句并设置jdbc字符集

    1.jdbc request支持执行多条sql语句 在JDBC Connection Configuration中的sql连接字串中添加如下内容 allowMultiQueries=true 如下图: ...

  5. mybatis执行多条sql语句

    1,mybatis执行多条sql语句,有以下几种思路, a,存储过程 b,修改jdbc的参数,允许执行多条语句,如下所示: sqlserver可以直接使用begin,end来执行多条语句, mysql ...

  6. springBoot + mybatis实现执行多条sql语句出错解决方法

    在Idea中执行多条sql语句的修改(mybatis默认的是执行sql语句是执行单条,所以要执行多条的时候需要进行配置) 需要在连接字符串中添加上&allowMultiQueries=true ...

  7. Jmeter的JDBC请求执行多条SQL语句

    注:有mysqlconnector/j 3.1.1以上版本才支持执行多条sql语句 1.     下载jdbc驱动为了连接Mysql数据库,还需要有个jdbc驱动:mysql-connector-ja ...

  8. C#实现执行多条SQl语句,实现数据库事务

    C#实现执行多条SQl语句,实现数据库事务 在数据库中使用事务的好处,相信大家都有听过银行存款的交易作为事务的一个例子.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的 ...

  9. c#中执行多条sql语句【ORA-00911: 无效字符】

    问题描述: 在plsql里执行多条sql语句的时候,使用“,”(逗号)分隔,测试可以执行多条,而在C#执行多条sql语句的时候[ORA-00911: 无效字符]. 有时我们需要一次性执行多条sql语句 ...

随机推荐

  1. mysql c语言 动态链接库

    下载地址 https://dev.mysql.com/downloads/connector/c/ 使用libmysql.lib和libmysql.dll进行操作mysql

  2. Generator [ˈdʒenəreɪtə(r)] 函数结构

    Generator函数是ES6新增的一种异步编程方案. 说明:Generator函数指的是一种新的语法结构,是一个遍历器对象生成器,它内部可以封装多个状态,非常适合用于异步操作. Generator函 ...

  3. selenium webdriver 的三种等待方式

    1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver ...

  4. 4种常见的MySQL日志类型

    4种常见的MySQL日志类型 .错误日志 记录启动.运行或停止mysqld时出现的问题 log-error=d:/mysql_log_err.txt .查询日志 记录建立的客户端连接和执行的所有语句( ...

  5. 基于Python Tornado的在线问答系统

    概述 本项目使用最新的Tornado开发.实现了在线提问,回答,评论等功能.使用到Tornado的generator,长轮询等等技术, 支持MySQL的异步连接. 详细 代码下载:http://www ...

  6. Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now running 50641. Please use mysql_upgrade to fix this error.

    出现问题: Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now runn ...

  7. cxf利用接口规范写法发布webservice

    package cn.itcast.cxf; import javax.jws.WebService; @WebService public interface IHelloService { pub ...

  8. tsung的配置使用

    1.在root下新建.tsung文件,在.tsung文件新建log文件夹..tsung文件用于存放log和xml文件 2.复制/usr/local/tsung/share/doc/tsung/exam ...

  9. 04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...

  10. 又是一年WWDC,暨回想去年之旅——Part III

    前言 无论这篇写到哪里,就以这篇作为结尾,结束这个流水回想系列文了. Computer History Museum 计算机历史博物馆(站点)是在Google旁边,參观Google之前的行程. 记得那 ...