0

我有一个如下的 php 代码片段:

function is_ancestor_of( $page_name = null, $post ) {

if(is_null($page_name))
return false;

// does it have a parent?
if (!isset( $post->post_parent ) OR $post->post_parent <= 0 )
return false;

//Get parent page
$parent = wp_get_single_post($post->post_parent);

 if ( $parent->post_name == $page_name ){
echo $parent->post_name.' - '.$page_name;
return true;
} else {
is_ancestor_of( $page_name, $parent );
}
}

我只想在 mysql 数据库表中插入整个代码,然后再次在页面上使用相同的格式重新检索它。当我简单地使用 INSERT INTO 查询将此代码插入数据库时​​,会发生 mysql 语法错误,因为代码由于特殊字符而中断了 sql 查询。有没有办法做到这一点?

谢谢。

4

3 回答 3

3

使用mysql_real_escape_string()转义特殊字符。您可能最好不要使用 mysql_* 函数,例如开始使用PDOmysqli_*

编辑 如评论中所述,确保将代码作为字符串放置,并且 DB 字段是正确的数据类型。此外,请确保在整个字符串(或代码)上使用 mysql_real_escape_string()(如果您坚持使用 mysql_*)。

于 2012-07-15T18:22:34.560 回答
3

是的,你可以这样做。多种方式:

  1. PDO - 这实际上是最好的选择。在 PHP 手册中研究这个主题,因为这比保护 PHP 中的 MySQL 查询不被破坏更有帮助。
  2. addlashes() - 添加斜杠以转义字符。这肯定不会破坏您的 MySQL 查询。
  3. mysql_real_escape_string()
  4. mysql_escape_string()

与此答案的先前版本相比,已编辑 强调 PDO,因为 PDO 比其他选项更安全,并且在使用 PHP 和 MySQL 时可以使用更多。

于 2012-07-15T18:25:11.160 回答
0

您将需要使用 mysql_real_escape_string() 来转义 php 代码,以便在插入时不会引发错误。然后,如果您希望它执行,则在该语句上运行 eval()。如果你有一个混合的 html 和 php 存储在数据库中,你会像这样调用 eval

 eval('?>'.$dbresult.'<?php');

只需确保您在数据库结果上使用 stripslashes()

于 2012-07-15T18:34:34.307 回答