将字符串插入MySQL

时间:2011-02-28 18:34:08

标签: php mysql forms encoding

我遇到了一个问题,我认为MySQL中的insert语句会搞乱输入数据库的字符串。

我在PHP代码中有这样的插入语句:

$sql = 'insert into my_table ( numeric_id , string_value ) 
        values ( '.$some_number.' , "'.$some_text.'" )';

当我稍后从数据库中获取$some_text时,它就会混淆像 don\'t而不是将\r\n之类的广告投放到输出​​中。

知道为什么会这样,我应该改变什么?

5 个答案:

答案 0 :(得分:3)

你的一些代码正在逃避两次 你只需要找到第二次执行它的代码并摆脱它。

首先,您必须打印出变量才能看到它的实际内容 根据假设来理清被蒙蔽的东西是很难的。

只需打开$some_text变量,然后再转发它并查看。如果它已经被转义 - 那么在代码中的某个地方就已经进行了额外的转义。

答案 1 :(得分:1)

始终使用prepared statements将数据插入到SQL中。然后你根本不需要做任何逃避。

答案 2 :(得分:-1)

$ sql =“插入my_table(numeric_id,string_value)值('$ some_number','$ some_text')”; $ query = mysql_query($ sql);

/ ** 只需使用(“)代替('); * /

答案 3 :(得分:-2)

首先,逃避你的意见:

$sql = 'insert into my_table ( numeric_id , string_value ) values (' . mysql_real_escape_string($some_number) . ', "' . mysql_real_escape_string($some_text) . '")';

其次,斜杠的问题可能是由于PHP Magic Quotes。您可以在此处详细了解:http://www.php.net/manual/en/security.magicquotes.disabling.php

您可以通过运行以下方法检查魔术引号是否已打开:

var_dump(get_magic_quotes_gpc());

如果它已启用,您可以禁用它(如果您可以访问php.ini)或者您可以使用PHP代码来修复魔术引号创建的问题:

if (get_magic_quotes_gpc()) {
    function stripslashes_gpc(&$value) {
        $value = stripslashes($value);
    }
    array_walk_recursive($_GET, 'stripslashes_gpc');
    array_walk_recursive($_POST, 'stripslashes_gpc');
    array_walk_recursive($_COOKIE, 'stripslashes_gpc');
    array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}

(取自PHP.net)

答案 4 :(得分:-4)

这应该有效

$sql = "insert into my_table ( numeric_id , string_value ) 
        values ( '.$some_number.' , '".$some_text."' )";