2009-10-31 2 views
1

У меня возникли проблемы с запуском этого запроса. Я продолжаю получать сообщение об ошибке:PHP + MYSQL: проблема с запросом обновления

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'read = 'readd' WHERE user_id = '1' LIMIT 1' at line 1

Код

$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
    mysql_select_db('main') or die(mysql_error()); 

$read = "message read"; 

$set_statuss = "UPDATE inbox ". 
      "SET read = '".$read."' ". 
      "WHERE user_id = '".$_SESSION['user_id']."' ". 
      "LIMIT 1"; 

Edit: Это таблица:

CREATE TABLE `inbox` (
`inbox_id` int(5) NOT NULL auto_increment, 
`posted_to` int(5) NOT NULL, 
`posted_by` int(5) NOT NULL, 
`subject` text NOT NULL, 
`message` text NOT NULL, 
`date_posted` datetime NOT NULL, 
`read` text NOT NULL, 
PRIMARY KEY (`inbox_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

Edit: Обновленный запрос, но теперь PHP является просто появляется как белый ..

$read = "read"; 

$set_statuss = "UPDATE inbox ". 
      "SET read = '".$read."' ". 
      "WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' "; 

mysql_query($set_statuss) or die(mysql_error() . $set_statuss); 

И адрес в адресной строке:

http://localhost:8888/wmin/msg.php?user_id=1&msg_id=2 

Кто-нибудь увидеть, где я буду неправильно? Благодаря!

ответ

4

Я думаю, что в качестве ключевого слова можно взять read, попробуйте его обрезать, то есть используя «обратные кавычки» вокруг него (трудно выразить в языке разметки SO ;-).

+0

Думаю, я понимаю, о чем вы говорите. Я пробовал помещать backquotes вокруг него, не работал ... Я тогда попытался изменить имя столбца в таблице все еще ничего: / – Stephen

1

С одной стороны, это сделает ваш код более удобным для чтения, если вы использовали heredoc. Для другого, почему вы ограничиваете это до 1 строки? Откуда вы знаете, какую строку вы обновляете?

Вы должны сообщить об ошибках в вызове mysql_query(), чтобы узнать, что именно произошло неправильно. Я предполагаю, что $_SESSION['user_id'] - это номер? Если он не определен, запрос завершится с ошибкой, поэтому вы должны зарегистрировать и/или сообщить об ошибке и SQL.

$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
mysql_select_db('main') or die(mysql_error()); 

$read = "message read"; 
$sql = <<<END 
UPDATE inbox 
SET read = `$read` 
WHERE user_id = $_SESSION[user_id] 
END; 
mysql_query($sql) or die(mysql_error() . ': ' . $sql); 
0

Для обеспечения безопасности я предлагаю использовать функцию sprintf для передачи параметра.

$q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1", 
        $read, $_SESSION['user_id']); 
0

Эй, ребята выяснили, что случилось:

$read = "message read"; 

$set_statuss = "UPDATE inbox ". 
      "SET readd = '".$read."' ". 
      // changed $_SESSION to $_GET and the ';' after msg_id GET 
      "WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' "; 

mysql_query($set_statuss) or die(mysql_error() . $set_statuss); 

Спасибо всем!

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