SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.05.2010 02:24:49

Leksey2
Участник
Зарегистрирован: 11.05.2010
Сообщений: 4

Запрос обрывается на знаках вопроса, восклицательном.

Здравствуйте.
Если исполняю к примеру такой запрос чеhез PhpMyAdmin   

INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (unix_timestamp(), 1, 0, 3, 0, 0, 0, 0, '??????????????????', '', -1, 1, 3)

то в базе все появляется и нормально выводится. Но через php скрипт любые сообщения содержащие знак вопроса, восклицательный, &, обрываются при их появлении, то есть появляется вот такое сообщение об ошибке в логах:
   

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 ''' at line 1
INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (unix_timestamp(), 1, 0, 3, 0, 0, 0, 0, '

Array
(
    [0] => Array
        (
            [file] => /db.inc.php
            [line] => 232
            [function] => db_exec
            [args] => Array
                (
                    [0] => INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (unix_timestamp(), 1, 0, 3, 0, 0, 0, 0, '??????????????????', '', -1, 1, 3)
                    [1] => Array
                        (
                        )

                    [2] => chat
                )

        )

    [1] => Array
        (
            [file] => /c.php
            [line] => 440
            [function] => db_insert
            [args] => Array
                (
                    [0] => INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (unix_timestamp(), 1, 0, 3, 0, 0, 0, 0, '??????????????????', '', -1, 1, 3)
                    [1] => Array
                        (
                        )

                    [2] => chat
                )

        )

    [2] => Array
        (
            [file] => /c.php
            [line] => 333
            [function] => chat_msg_send2
            [args] => Array
                (
                    [0] => Array
                        (
                            [message] => ??????????????????
                            [user_id] => 44617
                            [area_id] => 3
                            [clan_id] => 0
                            [x] => -1
                            [y] => 1
                            [b5] => 12
                            [personage] => 3
                            [bgroup] => 0
                        )

                )

        )

)
 

php код:

       $query = 'INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (';
    $query .= 'unix_timestamp(), ';
    $query .= intval($params['user_id']).', ';
    $query .= intval($params['chat_id']).', ';
    $query .= intval($params['area_id']).', ';
    $query .= intval($params['clan_id']).', ';
    $query .= intval($params['system']).', ';
    $query .= intval($params['to']).', ';
    $query .= intval($params['private']).', ';
    $query .= "'".mysql_real_escape_string($message)."', ";
    $query .= "'".mysql_real_escape_string($message2)."', ";
    $query .= intval($params['x']).', ';
    $query .= intval($params['y']).', ';
    $query .= intval($params['personage']).')';

    $id = db_insert($query, array(), 'chat');
 

кодировка базы UTF-8.
Что можете посоветовать для решения этого вопроса?

Отредактированно Leksey2 (11.05.2010 02:35:06)

Неактивен

 

#2 11.05.2010 12:27:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос обрывается на знаках вопроса, восклицательном.

Посоветовать можно не использовать db_insert (конкретно — он у Вас
почему-то трактует апостроф как конец строки).

Неактивен

 

#3 11.05.2010 13:45:32

Leksey2
Участник
Зарегистрирован: 11.05.2010
Сообщений: 4

Re: Запрос обрывается на знаках вопроса, восклицательном.

Я наверно не так объяснил. Если в запросе нет знаков вопроса, восклицательного, а только буквы, то все заносится в базу. Если в предложении встречаются ! или ?, запрос обрывается сразу перед ними, то есть получается что-то типа такого

INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (unix_timestamp(), 1, 0, 3, 0, 0, 0, 0, 'слово_перед_знаком_вопроса

Так вот я думаю, может эти знаки можно как-то перекодировать, что бы они не в прямом виде ложились в базу, а в измененном, и при выводе выводились как нужно?

Неактивен

 

#4 11.05.2010 14:11:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос обрывается на знаках вопроса, восклицательном.

Ааа, он реагирует не на апостроф, а на вопросительный знак smile Тогда он по крайней
мере не выглядит испорченным smile

Впрочем, решение то же — или использовать db_insert по назначению, или не исполь-
зовать его вовсе. Смотрите, что происходит. Когда db_insert видит строку вида
INSERT INTO tablename VALUES (?),
он подставляет вместо ? значение второго аргумента. У Вас вторым аргументом явля-
ется пустой массив. Соответственно, нужно или переделать запрос через нормальные
placeholderы (так, как он ожидает), или не использовать db_insert.

Неактивен

 

#5 11.05.2010 18:30:21

Leksey2
Участник
Зарегистрирован: 11.05.2010
Сообщений: 4

Re: Запрос обрывается на знаках вопроса, восклицательном.

paulus написал:

нужно или переделать запрос через нормальные
placeholderы (так, как он ожидает), или не использовать db_insert.

Не могли бы по подробнее? а то я а так сказать начинающий smile

Неактивен

 

#6 11.05.2010 20:44:34

Leksey2
Участник
Зарегистрирован: 11.05.2010
Сообщений: 4

Re: Запрос обрывается на знаках вопроса, восклицательном.

проблема решилась экранированием этих знаков smile

Неактивен

 

#7 12.05.2010 09:50:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос обрывается на знаках вопроса, восклицательном.

В Вашем случае правильнее было бы делать как-то так:
db_insert ('INSERT INTO chat (created, user_id, chat_id, area_id, clan_id, `system`, `to`, private, message, message2, x, y, personage) VALUES (NOW(),?,…)', array(intval($params['user_id']), …);

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson