从包含引号的现有行在MySQL中插入行

时间:2010-08-26 00:44:21

标签: php mysql

只是想知道,为了清理用户输入,我在数据插入表之前使用mysql_real_escape_string()。因此,当用户输入以下内容时:

Hi I'm just testing this

它完全放入表中,完全如上所述。问题是,如果我要通过PHP提取数据并将其放入变量中,比如$ string,如果我然后使用该变量将数据插入表中的新行,会发生什么?如:

<?php

$result = mysql_query( "SELECT data FROM table WHERE id='1'" ); //data = Hi I'm just testing this
$result_array = mysql_fetch_array( $result );

$string = $result_array['data'];  //string = Hi I'm just testing this

$insert = mysql_query( "INSERT INTO table (data) VALUES ('$string')" ) or die(mysql_error());

?>

单引号(')会导致这种情况出现问题吗?在这种情况下我应该使用$ string = mysql_real_escape_string($ result_array ['data'])吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

一旦数据从MySQL中撤出,它就像您要在查询中使用的任何其他数据一样:您必须进行适当的转义/引用,或使用预准备语句。 PHP中没有一个神奇的标志,上面写着“这来自数据库并且应该从它返回”。

另一种方法是使用INSERT INTO ... SELECT FROM语法在数据库中完全执行操作,如果符合条件的话。

答案 1 :(得分:0)

mysql_real_escape_string()只是准备将其插入数据库,一旦您再次请求数据,它将处于其原始形式,即您必须在尝试插入之前再次对其进行清理,就像上面的示例一样。< / p>