2012-07-15 123 views
0

我有一个PHP代码片断象下面这样:如何插入在MySQL数据库中的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数据库表这整个代码,并再次与此相同retriew它在页面上再次格式化。当我使用INSERT INTO查询简单地将此代码插入数据库时​​,会发生mysql语法错误,因为代码因特殊字符而中断了SQL查询。有没有办法做到这一点?

谢谢。

+2

几个问题:1,使用你准备像PDO中的陈述? 2.你试图插入的代码被视为字符串吗? 3.什么是列的数据类型(您试图插入此代码片段的位置;应插入文本类型或类似内容)? 4.我不会问你为什么要将代码片段添加到数据库行。我只是假设这是一个合法的理由,像博客发布代码示例:) – Stegrex 2012-07-15 18:23:34

回答

2

是的,你可以做到这一点。多种方式:

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

EDITED 强调PDO相比以前的版本这个答案为PDO是远远超过其他选项更安全,还有很多东西要它可以在使用PHP和MySQL时使用。

+0

不_not_使用'addslashes'来转义MySQL查询的字符串。在这一点上你甚至不应该使用'mysql_real_escape_string'或任何'mysql'模块函数。使用'mysqli'或'pdo'。但绝对不要使用'addslashes'。 – 2012-07-15 18:34:23

+0

是的,我自己使用PDO,但那些是我开始使用的。但是,的确,PDO应该是实现这一目标的方法。 – vaidik 2012-07-15 18:50:19

3

使用mysql_real_escape_string()转义特殊字符。例如,你可能会更喜欢远离mysql_ *函数,并开始使用PDOmysqli_*

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

0

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

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

只要确保你stripslashes()函数在数据库结果

+0

Yuck .. eval():( – Bono 2012-07-15 18:35:22

+0

是的,它只是一个获取代码从数据库执行的唯一方法之一 – 2012-07-15 18:35:53