存储过程在PHP怎么样取得结果集?

yzxlyd 2006-07-18 11:32:09
我的存储过程是这样的
create procedure dd()
begin
select * from pet;
end

call dd()
可以得到
name   owner  species  sex  birth   death
adsf   asdf   safadf   a    2006-07-17 <NULL>
Puffball Diane   hamster   f    1999-03-30 <NULL>

在PHP里
mysql_connect("localhost", "root", "root");
mysql_select_db("test");
$res = mysql_query("call dd()");
while ($row = mysql_fetch_array($res)) {
echo $row[0]."<br>";
}
就不行,这是什么错呢?
...全文
345 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzxlyd 2006-07-18
  • 打赏
  • 举报
回复
很谢谢你的热情,我要解答的是存储过程,不是事务
call dd()这是MYSQL的
exec dd()这才是MS-SQL的
lantersen 2006-07-18
  • 打赏
  • 举报
回复
更正下:
mysql_query("START TRANSACTION");//开始时
for($i=0;$i<10;$i++)
{
mysql_query("UPDAT `yourTable` SET `value`= 'hello' WHERE `id`='$i'");
}
mysql_query("COMMIT");//结束时
lantersen 2006-07-18
  • 打赏
  • 举报
回复
另外手册中没有找到
$res = mysql_query("call dd()")中的call dd();
可能是MS-SQL中的吧
lantersen 2006-07-18
  • 打赏
  • 举报
回复
没用过,只用过一个事务处理的,
START TRANSACTION;//开始时
for($i=0;$i<10;$i++)
{
mysql_query("UPDAT `yourTable` SET `value`= 'hello' WHERE `id`='$i'");
}
COMMIT;//结束时

以下是手册上的:

5.4.4 存储过程和触发器
一个存储过程是能在服务器中编译并存储的一套SQL命令。一旦这样做了,顾客不需要一直重新发出全部查询,而可以参考存储过程。因为查询仅需一次词法分析并且较少的信息需要在服务器和客户之间传送,因此这提供了更好的性能。你与可以通过拥有在服务器中的函数库提升概念上的层次。
一个触发器是当一个特别的事件发生时,被调用的一个存储过程。例如,你可以安装一个存储过程,它在每次从一个交易表删除一条记录时触发,并且当它所有交易被删除时,自动地从一个客户表中删除相应的客户。
计划修改的语言将能处理存储过程,但是没有触发器。触发器通常使每件事情变慢,即使对他们不需要的查询。
为了俩解什么时候MySQL可能得到存储过程,见F 我们想在未来加入到MySQL的事情列表(TODO)。

yzxlyd 2006-07-18
  • 打赏
  • 举报
回复
现在已经可以了
我原来用的是php.ini-recommended,后来改用php.ini-dist就可以了。
wenshuicao(水草)、lantersen(蓝水仁),谢谢你们!!
Ahdong 2006-07-18
  • 打赏
  • 举报
回复
MARK~
wenshuicao 2006-07-18
  • 打赏
  • 举报
回复
注意捕捉错误
<?
$link = mysqli_connect("localhost", "root", "root","test");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}


/* Select queries return a resultset */
if ($result = mysqli_query($link, "call dd()")) {
printf("Select returned %d rows.\n", mysqli_num_rows($result));
while ($row = mysqli_fetch_array($result)) {
print_r($row[0]);
echo "<br />";
}

/* free result set */
mysqli_free_result($result);
}

/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */

mysqli_close($link);
?>
yzxlyd 2006-07-18
  • 打赏
  • 举报
回复
加载php_mysqli.dll成功了。
但是用wenshuicao(水草) 的方法还是不行
mysqli_connect("localhost", "root", "root");
mysqli_select_db("test");
$res = mysqli_query("call dd()");
while ($row = mysqli_fetch_array($res)) {
echo $row[0]."<br>";
}
zeroleonhart 2006-07-18
  • 打赏
  • 举报
回复
open php_mysqli.dll extension in php.ini
replace all your mysql functions with mysqli
they are the same way to use.
wenshuicao 2006-07-18
  • 打赏
  • 举报
回复
在phpinfo() 信息里有 mysqli信息

mysqli
MysqlI Support enabled
Client API library version 4.1.7
Client API header version 4.1.7
MYSQLI_SOCKET /tmp/mysql.sock

Directive Local Value Master Value
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket no value no value
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.reconnect Off Off
wenshuicao 2006-07-18
  • 打赏
  • 举报
回复
在php5包里有ext/php_mysqli.dll,可能是你的php5是精简的,重新下php-5.1.4-Win32.zip,此文件大小有8M多,还有注意设置 php.ini 里的 extension_dir = "./"
yzxlyd 2006-07-18
  • 打赏
  • 举报
回复
wenshuicao(水草):
  我试过了也不行。
  我在php.ini加了extension=mysqli.dll,但我在我的PHP版本里面并没有找见mysqli.dll文件。要怎么样才能正确加载mysqli.dll文件。(我用的是PHP5)
wenshuicao 2006-07-18
  • 打赏
  • 举报
回复
mysqli 扩展允许用户访问由 MySQL 4.1 或更高版本所提供的功能。

mysqli_connect("localhost", "root", "root");
mysqli_select_db("test");
$res = mysqli_query("call dd()");
while ($row = mysqli_fetch_array($res)) {
echo $row[0]."<br>";
}
yzxlyd 2006-07-18
  • 打赏
  • 举报
回复
web_php(C#C++_PHPMYSQL_ASP) :
  试过了,也不行
用print_r($row)也什么都不出来。
web_php 2006-07-18
  • 打赏
  • 举报
回复
echo $row[“这里好象应该是他的字段吧”]."<br>";

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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