Ошибка Snytax при вставке сериализованного значения?

#php #mysql #serialization

#php #mysql #сериализация

Вопрос:

Мой код:

  $meta_ar = array("event_id" =>  $event_id, "user_id" => $user_id, "dbe" => $dbe, "hbe" => $hbe, "forum_id" => 'dummy_forum');

        $meta_ar = serialize($meta_ar);

        $db->query_write("
            INSERT INTO " . TABLE_PREFIX . "event_mod 
                (event_meta)
            VALUES
                (" . $meta_ar . ")
        ");
  

Ошибка:

 Invalid SQL:

            INSERT INTO event_mod 
                (event_meta)
            VALUES


    (a:5:{s:8:"event_id";N;s:7:"user_id";s:1:"1";s:3:"dbe";i:45;s:3:"hbe";i:32;s:8:"forum_id";s:11:"dummy_forum";});

MySQL Error   : 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 ':5:{s:8:"event_id";N;s:7:"user_id";s:1:"1";s:3:"dbe";i:45;s:3:"hbe";i:32;s:8:"fo' at line 4
Error Number  : 1064
  

Есть идеи?

Ответ №1:

Измените его так, чтобы значение заключалось в одинарные кавычки.

Когда вы передаете любую строку в любой столбец, который должен содержать строковое значение, тогда это должно быть заключено в кавычки.

  $db->query_write("
            INSERT INTO " . TABLE_PREFIX . "event_mod 
                (event_meta)
            VALUES
                ('" . $meta_ar . "')
        ");
  

Ответ №2:

Используйте PreparedStatement, ваш сериализованный массив не экранируется.