gpt4 book ai didi

php - 多个准备好的语句的问题

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

问题来了。我有一个准备好的声明,像这样:

$select_something = $db->stmt_init();
$select_something->prepare ("
SELECT whatever
FROM table
");
$select_something->execute();
$select_something->bind_result($whatever);

独自一人时 - 它有效。当我在执行后添加另一个时,它也有效。但是当我尝试先准备它们时:

$select_something = $db->stmt_init();
$select_something->prepare ("
SELECT whatever
FROM table
");

稍后执行它们:

$select_something->execute();
$select_something->bind_result($whatever);

第一个语句被执行,第二个语句对上面的两行抛出这个错误:

Warning: mysqli_stmt::execute() [mysqli-stmt.execute]: invalid object or resource mysqli_stmt

请注意,语句的命名方式不同($select_something 和 $select_something_else),我只是觉得没必要重复代码。

最佳答案

请注意,mysqli 扩展已替换为 PDO ,使用更简单,性能更好。你应该使用它而不是 mysqli。如果您需要 PDO 教程,请尝试“Writing MySQL Scripts with PHP and PDO”。即使切换,您可能仍希望找出问题所在,在这种情况下请继续阅读。

该特定错误仅表示您没有处理 $select_something$select_something_else 中的 mysqli_stmt。许多扩展(尤其是数据库扩展)中的函数在失败时返回 false,而不是资源或对象。这可能就是这里发生的事情。通过测试可能失败的函数的返回值来遵循正确的错误处理程序。使用 mysqli::error获取 MySQLi 函数/方法失败原因的描述。

您可能遇到了 mysqli 和 MySQL 驱动程序的限制:较低级别 mysql_use_result()mysql_store_result()在使用结果之前必须调用它们。默认情况下,mysqli_stmt::execute 可能调用 mysql_use_result,这意味着旧结果必须是 closed before a new query is run (在 mysqli::query() 的文档中提到)。正确应用mysqli_stmt::store_result可能会解决问题。

请注意,您不需要调用 mysqli::stmt_init(),它的存​​在(作为 mysqli_stmt_init)支持过程编程。相反,您可以使用 mysqli::prepare() .

关于php - 多个准备好的语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039151/

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