我正在将一些旧的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?)。那么这可能是一个“很久以前修复过的”错误?
答案 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)
而不是结果。