MySQLI mysqli_store_result导致格式错误的数据包错误

时间:2017-02-20 09:33:18

标签: php mysqli prepared-statement

我正在将一些旧的MySQL代码转换为MySQLI Prepared Statements并遇到麻烦: 如果我运行与准备语句相同的SQL代码,则会出现“格式错误的软件包”错误。即使使用非常简单的查询,例如“SELECT * FROM [TableName]”,也会发生这种情况。

我在一个单独的文件中创建了报告级别的连接和设置。因此,根据定义,代码必须是明确的。

作为具体示例,此代码有效:

services

但是这段代码:

$sql = "SELECT * FROM AngebotsDB";
$result = mysqli_query($link, $sql);

结束于:

$sql = "SELECT * FROM AngebotsDB";
// $result = mysqli_query($link, $sql);

$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt,$sql);
mysqli_execute($stmt);
$resultReference = mysqli_store_result($link); //throws exception
$result = mysqli_fetch_array($resultReference);

当我连接到数据库时,我真正找到的是一些旧的信息。

请注意,使用过的MySQLi / PHP版本相当陈旧(5.2.17?)。那么这可能是一个“很久以前修复过的”错误?

1 个答案:

答案 0 :(得分:2)

如果你初始化一个语句而不是你必须根据mysqli_stmt类调用其他函数,那么你的代码应该是。

   $sql = "SELECT * FROM AngebotsDB";
   $stmt = mysqli_stmt_init($link);
   mysqli_stmt_prepare($stmt,$sql);
   mysqli_stmt_execute($stmt);
   $resultReference = mysqli_stmt_store_result($link); 

现在,如果您尝试var_dump($resultReference)而不是返回true或错误。

如果您想使用mysqli_fetch_array显示结果,那么您必须传递mysqli_result参数,因此您必须使用mysqli_stmt_get_result

   $sql = "SELECT * FROM AngebotsDB";
   $stmt = mysqli_stmt_init($link);
   mysqli_stmt_prepare($stmt,$sql);
   mysqli_stmt_execute($stmt);
   $result = mysqli_stmt_get_result($stmt) ;
   $output = mysqli_fetch_array($result) ; 

现在您可以看到var_dump($output)而不是结果。