Ошибка bind_param () в запросе MySQL

У меня проблема с моим кодом.
Я использую функцию-член bind_param () в своем запросе, но я получил ошибку с моим кодом
Я не знаю, где ошибка моего кода.
Это часть моего кода:

<?php

session_start();
include_once 'functions.php';
loging(basename(__FILE__));
if (!isset($_SESSION['user'])) {
redirect('login.php');
}

$day_id = date('w');

$database = new mysqli('127.0.0.1', 'user', 'user', 'kantin');
$sesi = $_POST['sesi'];
$lauk = $_POST['lauk'];
$sayur = $_POST['sayur'];
$minuman = $_POST['minuman'];
$user = $_SESSION['username'];

$query_user = "SELECT * FROM user WHERE username LIKE '" . $user . "'";
$statement_user = $database->query($query_user);
$row_user = $statement_user->fetch_assoc();
$id_user = $row_user['user_id'];

$query_sesi = "SELECT * FROM sesi WHERE sesi LIKE '" . $sesi . "'";
$statement_sesi = $database->query($query_sesi);
$row_sesi = $statement_sesi->fetch_assoc();
$id_sesi = $row_sesi['sesi_id'];

$query_alt_id = "SELECT * FROM alternatif WHERE id_hari='" . $day_id . "' AND id_sesi= '" . $id_sesi . "' AND lauk_alt LIKE '" . $lauk . "'";
$statement_alt_id = $database->query($query_alt_id);
while ($row_alt_id = $statement_alt_id->fetch_assoc()) {
$id_alt = $row_alt_id['alternatif_id'];
$id_menu = $row_alt_id['lauk_alt'];
$id_hari = $row_alt_id['id_hari'];
$id_sesi = $row_alt_id['id_sesi'];
}

$query_insert = "INSERT INTO update (`id_menu_alt`, `id_user`, `id_hari`, `id_sesi`) VALUES (?,?,?,?)";
$statement_insert = $database->prepare($query_insert);
$statement_insert->bind_param('iiii', $id_alt, $id_user, $id_hari, $id_sesi);
$statement_insert->execute();redirect('today_menu.php');
?>

Когда я выполняю код, я получаю ошибку:
Неустранимая ошибка: вызов функции-члена bind_param () для необъекта в C: \ xampp \ htdocs \ IBAD \ Kantin_Pakoper \ change_alternatif_process.php в строке 40

Я не знаю, что не так с моим кодом или моим запросом.

1

Решение

Вы получаете сообщение об ошибке prepare()вот так возвращается false вместо mysqli_stmt, Чтобы увидеть сообщение об ошибке MySQL, выполните:

$statement_insert = $database->prepare($query_insert) or die($database->error);

В этом случае проблема заключается в том, что update является зарезервированным словом MySQL. Чтобы использовать его в качестве имени таблицы, вам нужно поставить его в кавычки:

$query_insert = "INSERT INTO `update` (`id_menu_alt`, `id_user`, `id_hari`, `id_sesi`) VALUES (?,?,?,?)";

Мне кажется странным, что вы помещаете все имена столбцов в обратные кавычки, даже если они не нужны, но вы не указали имя таблицы в обратных кавычках.

Кроме того, почему вы не используете подготовленные заявления для всех других запросов? Если вы не используете bind_param(), вам нужно экранировать строки, прежде чем объединять их в запросы.

2

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

Ваш запрос не был подготовлен должным образом, возможно, из-за неправильного синтаксиса. В будущем используйте if утверждение в вашей подготовке, чтобы вы могли избежать других операций, если синтаксис неправильный, как показано ниже;

if($statement_insert = $database->prepare($query_insert)) {
$statement_insert->bind_param('iiii', $id_alt, $id_user, $id_hari, $id_sesi);
$statement_insert->execute();
}
elseif($database->error) {
echo "Could not prepare SQL: " . $database->error;
}

Проблема с вашим текущим SQL в том, что update это специальное слово в MySQL (и SQL в целом), поэтому вам нужно поставить имя таблицы в правильной разметке

$query_insert = "INSERT INTO `update` (`id_menu_alt`, `id_user`, `id_hari`, `id_sesi`) VALUES (?,?,?,?)";
0

По вопросам рекламы [email protected]