gpt4 book ai didi

php - MySQL 查询可以通过工作台工作,但不能通过 mysqli

转载 作者:行者123 更新时间:2023-11-29 11:34:43 25 4
gpt4 key购买 nike

我正在尝试调用我的 PHP 类并运行函数 get_group_count,该函数计算特定用户 ID 的组数。 mysqli 查询使用可在 MySQL Workbench 中运行但不适用于 PHP 的 mysqli 的存储过程。

公共(public)功能:

public function get_group_count($userID) {
if($this->status()) {
$db = Database::getInstance();
$con = $db->getConnection();

$pull = $con->prepare("CALL get_group_count(?)");
$pull->bind_param('i', $userID); // line 19

if(!$pull->execute()) {
$pull->close();
return false;
};

$pull->store_result();
$pull->bind_result($count);
$pull->fetch();
$pull->close();

return $count;
};
return false;
}

错误:

Call to a member function bind_param() on a non-object in ... on line 19

存储过程:

DELIMITER //
CREATE PROCEDURE get_group_count(IN userID int)
BEGIN
SELECT (SELECT count(*) FROM groups WHERE adminID = userID) + (SELECT count(*) FROM members WHERE userID = userID) AS count;
END //
DELIMITER ;

通过 MySQL Workbench 调用该过程时,它会返回 groups 表和 members 表中的总行数。

注意:当尝试通过 mysqli 而不是存储过程运行查询时,我也遇到了相同的错误。

我该如何解决这个问题?

编辑:

$con var_dump:

object(mysqli)#4 (19) {
["affected_rows"]=>
int(1)
["client_info"]=>
string(6) "5.5.45"
["client_version"]=>
int(50545)
["connect_errno"]=>
int(0)
["connect_error"]=>
NULL
["errno"]=>
int(2014)
["error"]=>
string(52) "Commands out of sync; you can't run this command now"
["error_list"]=>
array(1) {
[0]=>
array(3) {
["errno"]=>
int(2014)
["sqlstate"]=>
string(5) "HY000"
["error"]=>
string(52) "Commands out of sync; you can't run this command now"
}
}
["field_count"]=>
int(1)
["host_info"]=>
string(25) "Localhost via UNIX socket"
["info"]=>
NULL
["insert_id"]=>
int(0)
["server_info"]=>
string(14) "5.5.45-cll-lve"
["server_version"]=>
int(50545)
["stat"]=>
string(52) "Commands out of sync; you can't run this command now"
["sqlstate"]=>
string(5) "HY000"
["protocol_version"]=>
int(10)
["thread_id"]=>
int(36623197)
["warning_count"]=>
int(0)
}

$pull var_dump:

bool(false)
NULL

EDIT2:最终切换到 PDO,现在一切正常。

最佳答案

查看 $con 后dump,看来您在此连接上执行的最后一个查询未使用其结果。 mysqli默认情况下使用无缓冲查询,因此您需要手动将上一个查询执行的结果获取到缓冲区中,或者释放它正在使用的内存,为新查询腾出空间,使用 store_result()free_result() ,分别。

关于php - MySQL 查询可以通过工作台工作,但不能通过 mysqli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36817389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com