Я нахожусь в процессе преобразования старого кода 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?). Так что это может быть «давно исправленной» ошибкой?
Если вы инициализируете оператор, то вы должны вызывать другие функции в соответствии с 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)
чем у вас есть результат.
Других решений пока нет …