сериализация не работает для меня в drupal - PullRequest
1 голос
/ 23 июля 2011

Я пытаюсь вставить данные в базу данных, но она удаляет фигурные скобки '{}', когда я использую этот код.

<code><pre><code>
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
$aa['alt']="happy alt";
$aa['title']="happy title";
$sldata=serialize($aa);
$sql="Insert into test(pval) values('".$sldata."')";
echo $sql;
db_query($sql);    

Моя структура БД выглядит как

<code><pre><code>
CREATE TABLE IF NOT EXISTS `test` (
  `sl` int(11) NOT NULL AUTO_INCREMENT,
  `pval` text NOT NULL,
  PRIMARY KEY (`sl`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1

подскажите, что здесь не так ..

Ответы [ 2 ]

2 голосов
/ 23 июля 2011

Drupal использует {} вокруг имен таблиц , чтобы иметь возможность выполнять некоторые манипуляции с этими именами - например, префиксировать их, если вы настроили его для этого.

Таким образом, вы не должны использовать {} в своем запросе - за исключением имен таблиц arround, конечно.


Вместо того, чтобы жестоко вводить вашу сериализованную строку в запрос SQL, вы должны использоватьзаполнители в нем - и передать соответствующие значения в db_query(), который позаботится о том, чтобы избежать того, что должно быть:

$sldata = serialize($aa);
$sql = "insert into {test} (pval) values('%s')";
db_query($sql, $sldata);

Здесь:

  • Поскольку поле pval является строкой в ​​базе данных, я использовал заполнитель% s
  • И первое значение было передано db_query() (после самого SQL-запроса, конечно) * drupal будет введен для замены этого первого (и только здесь) заполнителя.


И, для получения дополнительной информации, вы можете взглянуть на слой абстракции базы данных .

0 голосов
/ 23 июля 2011

вместо простой сериализации вы можете использовать base64_encode для обхода проклятий, являющихся проблемой.

http://php.net/manual/en/function.base64-encode.php

base64_encode(serialize($aa));

Затем на стороне извлечения данных

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