PHP序列化& mysql_real_escape_string问题

时间:2015-08-21 03:42:56

标签: php wordpress

我正在尝试在wordpress中将序列化数组添加到数据库中,但是我发现一些无法检索的内容,使用var_dump()来检查unserialize数组时返回false。

我的问题:使用mysql_real_escape_string转换这些特殊字符是否足够?与下面的过程相比,这是处理序列化数组的更好方法吗?

// create array
$array = array(
    "title" => mysql_real_escape_string( $_POST['title'] ),
    "description" => mysql_real_escape_string( $_POST['description'] ),
    "datetime" => mysql_real_escape_string( $_POST['datetime'] )
);
// serailize
$array = maybe_serialize($array);
// insert into database
$wpdb->insert("mytable", array("ID"=>NULL, "content"=>maybe_serialize($array)));

1 个答案:

答案 0 :(得分:0)

除了你在你的例子中进行两次序列化之外,我会首先序列化,然后转义结果字符串。如果您使用准备好的声明,它将为您进行转义。这意味着对转义函数的调用较少,而且我个人也试图尽可能长时间地保持数据不转义。它使未来的代码维护更容易。

但假设你不能使用PDO(我不熟悉WP)....

$a = array(
  'title' => $_POST['title'],
  'description' => $_POST['description'],
  'datetime' => $_POST['datetime'],
);
$serialized = serialize( $array );
// insert into database
$wpdb->insert("mytable",
  array( 
   "ID"=>NULL,
   "content"=>mysql_escape_string($serialized),
  )
);

另一方面,如果可能的话,我会将标题,描述等存储在不同的字段中(我意识到它可能不是)。