问题就在这里。我有一份准备好的声明,如下所示:
$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);
第一个语句被执行,第二个语句对上面的两行抛出此错误:
警告:mysqli_stmt::execute() [mysqli-stmt.execute]:无效的对象或资源 mysqli_stmt
请注意,语句的命名不同($select_something 和 $select_something_else),我只是认为无需重复代码。
请注意,mysqli 扩展已被替换为PDO,它使用起来更简单,性能也更好。你应该使用它而不是 mysqli。如果您需要 PDO 教程,请尝试“使用 PHP 和 PDO 编写 MySQL 脚本即使你切换了,你可能仍然希望弄清楚出了什么问题,在这种情况下请继续阅读。
该特定错误仅意味着您没有处理mysqli_stmt
in $select_something
or $select_something_else
。许多扩展(尤其是数据库扩展)中的函数返回false
当它们失败时,而不是资源或对象。这可能就是这里发生的事情。通过测试可能失败的函数的返回值来遵循正确的错误处理程序。使用mysqli::error获取 MySQLi 函数/方法失败原因的描述。
您可能会遇到 mysqli 和 MySQL 驱动程序的限制:较低级别mysql_use_result() or mysql_store_result()在使用结果之前必须调用它们。默认情况下,mysqli_stmt::execute
可能会打电话mysql_use_result
,这意味着旧结果必须是在运行新查询之前关闭(在文档中提到mysqli::query())。正确应用mysqli_stmt::store_result可能会解决问题。
请注意,您不需要致电mysqli::stmt_init()
,存在(如mysqli_stmt_init
)支持过程化编程。相反,您可以使用mysqli::prepare().
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)