请教php调用mysql存储过程问题!谢谢指点

www308 2007-08-30 05:55:20
在mysql中新建了如下存储过程
mysql>delimiter //
->CREATE PROCEDURE `myProc`()
->begin
->select * from test_table ;
->end;
->//
mysql>delimiter ;
mysql>call myProc();
以上代码在mysql中执行一切正常;
我想在php中调用该存储过程用下面语句(数据库的连接都正常)
$rs = mysql_query("call myProc()");
while($rs1=mysql_fetch_array($rs))
{
echo "id=".$rs1[id]." \n ";
echo "studentno=".$rs1[studentno]."\n";
echo "score=".$rs1[score]."\n";
echo "time=".$rs1[time]."<br>";
}
却总是报如下错误:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\Apache Group\Apache2\htdocs\test_0813.php on line 159
不知道从php中该如何调用这个存储过程?谢谢高手能给予指点!
...全文
211 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2007-08-31
  • 打赏
  • 举报
回复
看你的帖子上面----管理----给分。
www308 2007-08-31
  • 打赏
  • 举报
回复
谢谢yueliangdao0608提供的类
得好好研究下 呵呵 怎么给分的啊 第一次来还不是很清楚的哦
懒得去死 2007-08-31
  • 打赏
  • 举报
回复
怎我删除我自己的帖子也要扣信誉分?
懒得去死 2007-08-31
  • 打赏
  • 举报
回复
我给你写另一个类。
这个是在命令行执行的结果:
mysql > delimiter ¦ ¦
mysql > create procedure myProc()
- > begin
- > select * from auto_t;
- > end ¦ ¦
Query OK, 0 rows affected (0.00 sec)

mysql > delimiter ;
mysql > call myProc();
+----+---------+
¦ id ¦ name ¦
+----+---------+
¦ 1 ¦ 3 ¦
¦ 2 ¦ 5 ¦
¦ 3 ¦ sdflsjf ¦
+----+---------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql >


<?php
$DOC_ROOT = $_SERVER['DOCUMENT_ROOT'];
//require_once($DOC_ROOT. "/config/config.php ");
define ('MY_HOST','localhost');
define ('MY_USER','webuser');
define ('MY_PASS','test');
define ('MY_DB','test');
define ('MY_PORT','3307');
//define (MY_SOCKET,'/tmp/mysql_sock');

class My_Mysqli{

var $mysqli;
var $row;
var $count;
var $affected_row_sql;
var $affected_row_sp;

function My_Mysqli(){
$this- >mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT);
// $this- >mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT,MY_SOCKET);
if (mysqli_connect_errno()){
die( "Connect failed: ".mysqli_connect_error());
}
$this- >row = null;
$this- >count = 0;
//$this- >next_row = array();
}

function call_sql($sql){
$this- >mysqli- >query($sql);
$this- >affected_row_sql = $this- >mysqli- >affected_rows;

}



function call_sp($query){
$this- >mysqli- >multi_query($query);
do {
if ($result = $this- >mysqli- >use_result()){
while ($row = $result- >fetch_row()){
$this- >row[$this- >count++] = $row;
}
$result- >close();
}
} while($this- >mysqli- >next_result());
$this- >affected_row_sp = $this- >mysqli- >affected_rows;

}

function close_sp(){
$this- >mysqli- >close();
}
}

$mysqli = new My_Mysqli();
$query = 'call myProc();';
$mysqli- >call_sp($query);
$mysqli- >close_sp();
print ' <pre >';
print_r($mysqli- >row);
print ' </pre >';
? >

这个是在WEB页面上执行的结果:

Array
(
[0] = > Array
(
[0] = > 1
[1] = > 3
)

[1] = > Array
(
[0] = > 2
[1] = > 5
)

[2] = > Array
(
[0] = > 3
[1] = > sdflsjf
)

)
懒得去死 2007-08-31
  • 打赏
  • 举报
回复
要对存储过程很好的支持莫过于MYSQLI了。MYSQL和PDO对存储过程的支持不是很好,特别是多结果集的处理。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧