PHP + MYSQL: проблема с запросом на обновление - PullRequest
1 голос
/ 31 октября 2009

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

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'read =' readd 'WHERE user_id =' 1 'LIMIT 1' в строке 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";

Редактировать: Это таблица:

 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 ;

Редактировать: обновлен запрос, но теперь 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);

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

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

Кто-нибудь видит, где я иду не так? Спасибо!

Ответы [ 4 ]

4 голосов
/ 31 октября 2009

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

1 голос
/ 31 октября 2009

С одной стороны, ваш код будет легче читать, если вы используете 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 голосов
/ 31 октября 2009

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

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

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

0 голосов
/ 31 октября 2009

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

$q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1",
                    $read, $_SESSION['user_id']); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...