PHP执行批量mysql语句的解决方法


Posted in PHP onMay 02, 2013

当有多条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的错误状态

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

代码如下:

$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的脚本的话,这招就非常好用了。

 

PHP 相关文章推荐
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
php中filter_input函数用法分析
Nov 15 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
php文件管理基本功能简单操作
Jan 16 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
PHP7 整型处理机制修改
Mar 09 PHP
PHP闭包(Closure)使用详解
May 02 #PHP
PHP5中Cookie与 Session使用详解
Apr 30 #PHP
PHP容易忘记的知识点分享
Apr 30 #PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 #PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 #PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 #PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 #PHP
You might like
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
常用jQuery代码分享
2015/07/14 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
python数据处理实战(必看篇)
2017/06/11 Python
详解python3中zipfile模块用法
2018/06/18 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
2014年道德讲堂实施方案
2014/03/05 职场文书
决心书范文
2014/03/11 职场文书
挂牌仪式主持词
2014/03/20 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技
Spring Boot 实现 WebSocket
2022/04/30 Java/Android