SQL ломается на символе, который я не вставил в свой код - PullRequest
0 голосов
/ 05 апреля 2011

Я получаю синтаксическую ошибку в этом коде PHP:

<snip>
$last = (isset($_GET['last']) && $_GET['last'] != '') ? $_GET['last'] : 0;

$query = "SELECT message_id, user_name, message, date_format(post_time, '%h:%i') AS post_time" . 
    " FROM message WHERE chat_id = " . db_input($_GET['chat']) . " AND message_id > " . $last . ";";

$message_query = db_query($query);
</snip>

И db_query:

function db_query($query, $link = 'db_link') {
    global $$link;

    $result = mysql_query(mysql_real_escape_string($query), $$link) or db_error($query, mysql_errno(), mysql_error());

    return result;
}

Точная ошибка такова:

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 '\' %h:%i\') 
AS post_time FROM message WHERE chat_id = 1 AND message_id > 0' at line 1<br><br>
SELECT message_id, user_name, message, date_format(post_time, '%h:%i') AS 
post_time FROM message WHERE chat_id = 1 AND message_id > 0;

Как видите, выдается ошибка для символа, которого у меня нет / не видно в моем коде.Что здесь происходит?

Ответы [ 2 ]

5 голосов
/ 05 апреля 2011

Вам нужно использовать mysql_real_escape_string только для ваших переменных, а не для всего SQL-запроса.

Теперь переводится:

date_format(post_time, '%h:%i')

до:

date_format(post_time, \'%h:%i\')

Кстати, я предполагаю, что ваша функция db_input подготавливает ваши переменные для использования с базой данных, поэтому вам определенно нужно использовать это и для вашей переменной $last.

0 голосов
/ 05 апреля 2011

Попробуйте это:

$query = "SELECT message_id, user_name, message, " . 
date_format(post_time, '%h:%i') . "AS post_time" . " FROM message 
WHERE chat_id = " . db_input($_GET['chat']) . "AND message_id > " . $last . ";";

Попробуйте вызвать date_format вне строки " . date_format(post_time, '%h:%i') . "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...