PHP调用存储过程返回值不一致问题的解决方法分析


Posted in PHP onApril 26, 2016

本文实例讲述了PHP调用存储过程返回值不一致问题的解决方法。分享给大家供大家参考,具体如下:

今天遇一个同学聊存储过程返回值经常得到意外的值为null, 因为白天有事,晚上给做一个实验放在这里供有相应问题的同学查看一下。

存储过程:

delimiter//
createprocedureusp_s2(outpar1int)
begin
selectinet_ntoa(ip),portfromproxy_listlimit5;
selectcount(*)intopar1fromproxy_list;
END//
delimiter;

session 1执行:

mysql>callusp_s2(@a);
+—————+——+
|inet_ntoa(ip)|port|
+—————+——+
|1.34.21.86  |8088|
|1.34.59.50  |8088|
|1.34.69.15  |8088|
|1.34.73.110  |8088|
|1.34.76.218  |8088|
+—————+——+
5rowsinset(0.00sec)
QueryOK,1rowaffected(0.01sec)
mysql>select@a;
+——+
|@a  |
+——+
|4430|
+——+
1rowinset(0.00sec)

session 2执行:

mysql>select@a;
+——+
|@a  |
+——+
|NULL|
+——+
1rowinset(0.00sec)

可见两个session得到的结果不一致。 基本可以肯定两次调用落入不同的会话中会得到不同的值。
为了一致可以如用如下调用:

<?php
$hostname="127.0.0.1";
$username="wubx";
$password="wubxwubx";
$database="proxydb";
$db=newmysqli($hostname,$username,$password,$database);
if(mysqli_connect_errno()){
    printf("Connect failed: %s\n",mysqli_connect_error());
    exit();
}
$result=$db->multi_query("call usp_s2(@total); select @total;");
if($result){
    do{
    if($r=$db->store_result()){
        if($r->field_count==2){
            while($row=$r->fetch_row()){
                print"ip: $row[0], port: $row[1]\n";
            }
        }else{
            $row =$r->fetch_row();
            print"total: $row[0]\n";
        }
    }
    }while($db->next_result());
}
$db->close();
?>

$phpt_proc_return.php
ip:1.34.21.86,port:8088
ip:1.34.59.50,port:8088
ip:1.34.69.15,port:8088
ip:1.34.73.110,port:8088
ip:1.34.76.218,port:8088
total:4430

Good luck.

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP查询域名状态whois的类
Nov 25 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 PHP
PHP抓取及分析网页的方法详解
Apr 26 #PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 #PHP
基于PHP实现通过照片获取ip地址
Apr 26 #PHP
各种快递查询--Api接口
Apr 26 #PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 #PHP
Yii2增加验证码步骤详解
Apr 25 #PHP
Yii实现显示静态页的方法
Apr 25 #PHP
You might like
PHP学习之PHP运算符
2006/10/09 PHP
php获得当前的脚本网址
2007/12/10 PHP
php常用数学函数汇总
2014/11/21 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
理解Python中函数的参数
2015/04/27 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Python常见字典内建函数用法示例
2018/05/14 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
python实现简单银行管理系统
2019/10/25 Python
学python最电脑配置有要求么
2020/07/05 Python
详解python对象之间的交互
2020/09/29 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
大学生就业自荐信
2013/10/26 职场文书
工作收入证明范本
2015/06/12 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android