【问题标题】:mysql stored procedures using php使用php的mysql存储过程
【发布时间】:2011-02-10 08:23:11
【问题描述】:

我有一个存储过程:

delimiter //

create procedure userlogin(in eml varchar(50))

begin

  select * from users 

  where email = eml;

end//

delimiter ;

And the php:

$db = new mysqli("localhost","root","","houseDB");

$eml = "tsubi@gmail.com";

$sql = $db->query("CALL userlogin('$eml')");

$result = $sql->fetch_array();

运行php脚本时浏览器报错:

致命错误:在非对象上调用成员函数 fetch_array()...

我正在使用 phpmyadmin 3.2.4 版和 mysql 客户端 5.1.41 版。

【问题讨论】:

    标签: php mysql stored-procedures


    【解决方案1】:

    你必须使用 mysqli_multi_query,而不是查询。查看 http://us.php.net/manual/en/mysqli.multi-query.php,他们有一个很好的例子

    【讨论】:

    • 为什么调用存储过程需要mysqli_multi_query?他不是在创造它,他只是在召唤它,不是吗?
    • 但它返回值。如果没有,它将按原样工作(实际上,它正在工作,但为了从过程中访问结果集,我们需要使用 multi_query)。
    【解决方案2】:

    mysqli::query 在查询失败时返回false(而不是返回结果对象或true)。你需要测试结果是否真的是一个对象:

    $sql = $db->query("CALL userlogin('$eml')");
    
    if (is_object($sql)) 
    $result = $sql->fetch_array();
    else
    printf("Error: %s\n", $sql->error);
    

    您可能会收到一条错误消息,解释为什么调用存储过程没有成功。

    【讨论】:

    • $sql->error 也会失败,因为false 没有“错误”属性。如果是false可以echo mysql_error();调试错误
    • @maid450 这是mysqli,而不是mysql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2015-11-09
    • 2014-09-07
    • 2011-09-13
    • 1970-01-01
    相关资源
    最近更新 更多