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来写记数器(详细介绍)
Oct 09 PHP
基于mysql的bbs设计(五)
Oct 09 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
用PHP生成html分页列表的代码
Mar 18 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
php程序内部post数据的方法
Mar 31 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php微信小程序解包过程实例详解
Mar 31 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
JQuery live函数
2010/12/24 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
给同事的道歉信
2014/01/11 职场文书
篝火晚会策划方案
2014/05/16 职场文书
七年级地理教学计划
2015/01/22 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server