1

当我运行以下代码时:

$_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 [catalog] => def [max_length] => 0 [length] => 1 [charsetnr] => 63 [flags] => 36865 [type] => 3 [decimals] => 0 )

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

4

1 回答 1

0

来自MySQLi execute() 手册

笔记:

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

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

于 2013-01-14T13:58:55.823 回答