gpt4 book ai didi

php - 序列化在 drupal 中对我不起作用

转载 作者:行者123 更新时间:2023-11-29 07:06:53 26 4
gpt4 key购买 nike

我正在尝试将数据插入数据库,但它在插入时删除了大括号“{}”,我正在使用此代码。

<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);
</pre></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
</pre></code>

告诉我这里出了什么问题..

最佳答案

Drupal 使用 {} 围绕表名,以便能够对这些名称进行一些操作——比如为它们添加前缀,如果您已将其配置为这样做的话.

因此,您不得在查询中使用 {} - 当然,围绕表名称除外。


您必须在其中使用占位符,而不是粗暴地将您的序列化字符串注入(inject)到 SQL 查询中——并将相应的值传递给 db_query() ,它将负责转义必须是的内容:

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

这里:

  • 由于 pval 字段是数据库中的字符串,所以我使用了 %s 占位符
  • 传递给 db_query() 的第一个值 (当然是在 SQL 查询本身之后) 将由 drupal 注入(inject),以替换第一个 (并且仅在此处) 占位符。


而且,有关更多信息,您可能想看看 Database abstraction layer .

关于php - 序列化在 drupal 中对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com