MySQLI mysqli_store_result приводит к ошибке Malformed Packet

Я нахожусь в процессе преобразования старого кода MySQL в подготовленные операторы MySQLI и столкнулся с проблемой:
Если я запускаю тот же код SQL, что и подготовленный оператор, я получаю ошибку «Malformed Package». Это происходит даже с очень простыми запросами, такими как «SELECT * FROM [TableName]».

У меня есть создание соединения и настройка уровня отчета в отдельном файле в целом. Так что этот код должен быть идентичным по определению.

Как конкретный пример, этот код работает:

$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);

заканчивается в:

Fatal error: Uncaught exception 'mysqli_sql_exception' with message
'Malformed packet' in /home/cgroschupff/public_html/custom_code/DB
structure.php:16 Stack trace: #0 /home/cgroschupff/public_html/custom_code/DB structure.php(16):
mysqli_store_result(Object(mysqli)) #1 {main} thrown in
/home/cgroschupff/public_html/custom_code/DB structure.php on line 16

Все, что я мог действительно найти, — это какая-то старая информация об этом при подключении к БД.

Обратите внимание, что используемая версия MySQLi / PHP довольно старая (5.2.17?). Так что это может быть «давно исправленной» ошибкой?

0

Решение

Если вы инициализируете оператор, то вы должны вызывать другие функции в соответствии с 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) чем у вас есть результат.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector