当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2019-08-18 14:18:02 浏览: 评论:0 

本文实例讲述了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.

Tags: PHP存储过程 PHP返回值

分享到: