2014-10-25 7 views
1

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

<?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

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

ответ

2

Вы получаете сообщение об ошибке от звонка до 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 (?,?,?,?)"; 

Я нахожу странным, что вы кладете все имена столбцов в обратных кавычках, даже если они не нужны, но вы Ждете» t введите имя таблицы в backticks.

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

0

Ваш запрос подготовлен неправильно, возможно, потому, что синтаксис неверен. В будущем используйте инструкцию 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

меня сейчас (после редактирования btw, Barmar, не украл ваш ответ). – worldofjr

+0

Не то, что я сказал. Прочитай заново. – worldofjr

+0

@worldofjr Спасибо, мастер. Это работает. Я застрял в этом коде в течение нескольких часов: D –

Смежные вопросы