【问题标题】:MySQL->execute() causes another Query to crash?MySQL->execute() 导致另一个查询崩溃?
【发布时间】:2026-01-30 13:55:01
【问题描述】:

当我运行以下代码时:

$_1= $Var->prepare("SELECT Status FROM UserCompletion WHERE `UserID`=?");
$_1->bind_param('i', $_SESSION['UID']);
$_1->execute();
$metaResults = $_1->result_metadata();
$fields = $metaResults->fetch_fields();

我得到这个错误:

致命错误:在第 17 行的 /var/www/CMS/API/Constants.php 中的非对象上调用成员函数 fetch_row()

这个查询与我正在处理的页面在不同的页面上。这个查询是:

$PathLocation = $STD->query("SELECT PathLocation From SiteVariables");
$FilePath = $PathLocation->fetch_row();

当我注释掉 execute(); 时,它会停止返回该错误;为什么我的执行导致另一个页面崩溃?

更新

execute(); 查询没有失败。

$_1 = $STD->prepare("SELECT Status FROM UserCompletion WHERE `UserID`=?");
$_1->bind_param('i', $_SESSION['UID']);
$_1->execute();
$metaResults = $_1->result_metadata();
$fields = $metaResults->fetch_fields(); 
#$GetCompletedArray = $GetCompletedResults->fetch_array(MYSQLI_ASSOC);
print_r($fields);

返回:

( [0] => stdClass Object ( [name] => Status [orgname] => Status [table] => UserCompletion [orgtable] => UserCompletion [def] => [db] => SLMS [目录] => def [max_length] => 0 [length] => 1 [charsetnr] => 63 [flags] => 36865 [type] => 3 [decimals] => 0 ) )

在执行到位之前,我的其他查询不会失败。我知道这一点,因为如果没有对 constants.php 的查询,用户访问的每个页面都会被阻止。

【问题讨论】:

  • 该 contants.php 文件是否可能用作包含,并且执行您的新查询会导致某些变量被覆盖,这是以后需要的?
  • @Oldskool 为什么在 OP 使用 MySQLI API 时将其重新标记为 PDO?
  • @AshleySheridan 是的,constants.php 是一个包含文件,查询成功,没有变量被覆盖
  • @DarylGill 你是对的,我看错了。回滚了,谢谢指出。
  • 也许查询失败了?如果查询失败,mysqli_query 返回 false。您根本不测试这种情况 - 您是否尝试过查看 MySQL 在运行查询时是否输出任何错误信息?

标签: php mysqli


【解决方案1】:

来自MySQLi execute() manual

注意:

使用 mysqli_stmt_execute() 时,必须使用 mysqli_stmt_fetch() 函数在执行任何其他查询之前获取数据。

您包含的代码并没有这样做,它只是获取元数据,因此查询很可能会留下一个打开的结果集或游标,这会使您的第二条语句失败。

【讨论】:

    最近更新 更多