MySQL-> execute()导致另一个Query崩溃?

时间:2013-01-14 13:47:33

标签: php mysqli

当我运行以下代码时:

$_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对象([name] =>状态[orgname] =>状态   [table] => UserCompletion [orgtable] => UserCompletion [def] => [D b]   => SLMS [catalog] => def [max_length] => 0 [长度] => 1 [charsetnr] => 63 [flags] => 36865 [type] => 3 [小数] => 0))

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

1 个答案:

答案 0 :(得分:0)

来自MySQLi execute() manual;

  

注意:

     

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

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