Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 序列化在drupal中不为我工作_Php_Mysql_Drupal 6 - Fatal编程技术网

Php 序列化在drupal中不为我工作

Php 序列化在drupal中不为我工作,php,mysql,drupal-6,Php,Mysql,Drupal 6,我试图将数据插入数据库,但它在插入时删除了大括号{},同时使用此代码 <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)

我试图将数据插入数据库,但它在插入时删除了大括号{},同时使用此代码

<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>
$sldata = serialize($aa);
$sql = "insert into {test} (pval) values('%s')";
db_query($sql, $sldata);

需要一次“/includes/bootstrap.inc”;
drupal_引导(drupal_引导数据库);
$aa['alt']=“快乐alt”;
$aa['title']=“快乐的头衔”;
$sldata=serialize($aa);
$sql=“插入测试(pval)值(“$sldata”)”;
echo$sql;
数据库查询($sql);
我的数据库结构如下


创建表(如果不存在)`test`(
`sl`int(11)非空自动增量,
`pval`文本不为空,
主键(`sl`)
)引擎=InnoDB默认字符集=1

请告诉我这里有什么问题。

Drupal在表名周围使用
{}
,以便能够对这些名称进行一些操作,比如前缀,如果您已经进行了配置的话

因此,在查询中不能使用
{}
——当然,除了周围的表名


与粗暴地将序列化字符串注入SQL查询不同,您必须在其中使用占位符,并将相应的值传递给,这将负责转义必须转义的内容:

unserialize(base64_decode($db_data)); 
在这里:

  • 由于
    pval
    字段是数据库中的字符串,因此我使用了%s占位符
  • 而传递给
    db_query()
    (当然是在SQL查询本身之后)的第一个值将由drupal注入,以替换第一个(这里也是唯一一个)占位符


而且,要了解更多信息,您可能需要查看。

您可以使用base64_编码来绕过卷曲,而不是仅仅序列化

然后在数据的检索端


由于Drupal数据库抽象层的工作方式,那些
{}
被删除;对于@Sumant来说,了解该层是如何工作的会更有趣,而不是这次绕过这个问题,在下一个问题中再次陷入困境。。。
base64_encode(serialize($aa));
unserialize(base64_decode($db_data));