www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

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

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

存储过程:

  1. delimiter// 
  2.  
  3. createprocedureusp_s2(outpar1int) 
  4. //phpfensi.com 
  5. begin 
  6.  
  7. selectinet_ntoa(ip),portfromproxy_listlimit5; 
  8.  
  9. selectcount(*)intopar1fromproxy_list; 
  10.  
  11. END// 
  12.  
  13. delimiter; 

session 1执行:

  1. mysql>callusp_s2(@a); 
  2.  
  3. +—————+——+ 
  4.  
  5. |inet_ntoa(ip)|port| 
  6.  
  7. +—————+——+ 
  8.  
  9. |1.34.21.86  |8088| 
  10.  
  11. |1.34.59.50  |8088| 
  12.  
  13. |1.34.69.15  |8088| 
  14.  
  15. |1.34.73.110  |8088| 
  16.  
  17. |1.34.76.218  |8088| 
  18.  
  19. +—————+——+ 
  20.  
  21. 5rowsinset(0.00sec) 
  22.  
  23. QueryOK,1rowaffected(0.01sec) 
  24.  
  25. mysql>select@a; 
  26.  
  27. +——+ 
  28. –phpfensi.com 
  29. |@a  | 
  30.  
  31. +——+ 
  32.  
  33. |4430| 
  34.  
  35. +——+ 
  36.  
  37. 1rowinset(0.00sec) 

session 2执行:

  1. mysql>select@a; 
  2.  
  3. +——+ 
  4.  
  5. |@a  | 
  6.  
  7. +——+ 
  8.  
  9. |NULL
  10.  
  11. +——+ 
  12.  
  13. 1rowinset(0.00sec) 

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

为了一致可以如用如下调用:

  1. <?php 
  2.  
  3. $hostname="127.0.0.1"
  4.  
  5. $username="wubx"
  6.  
  7. $password="wubxwubx"
  8.  
  9. $database="proxydb"
  10.  
  11. $db=newmysqli($hostname,$username,$password,$database); 
  12.  
  13. if(mysqli_connect_errno()){ 
  14.  
  15.     printf("Connect failed: %s\n",mysqli_connect_error()); 
  16.  
  17.     exit(); 
  18.  
  19.  
  20. $result=$db->multi_query("call usp_s2(@total); select @total;"); 
  21.  
  22. if($result){ 
  23.  
  24.     do
  25.  
  26.     if($r=$db->store_result()){ 
  27.  
  28.         if($r->field_count==2){ 
  29.  
  30.             while($row=$r->fetch_row()){ 
  31.  
  32.                 print"ip: $row[0], port: $row[1]\n"
  33.  
  34.             } 
  35.  
  36.         }else
  37.  
  38.             $row =$r->fetch_row(); 
  39.  
  40.             print"total: $row[0]\n"
  41. //phpfensi.com 
  42.         } 
  43.  
  44.     } 
  45.  
  46.     }while($db->next_result()); 
  47.  
  48.  
  49. $db->close(); 
  50.  
  51. ?> 

$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.

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP调用存储过程返回值不一致问题的解决方法分析》
文章链接:https://www.adminn.cn/news/7604.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

2次开发,学习研究使用!扫码支付后联系QQ677123发货!

支付宝扫一扫打赏