我遇到了一个问题,我认为MySQL中的insert语句会搞乱输入数据库的字符串。
我在PHP代码中有这样的插入语句:
$sql = 'insert into my_table ( numeric_id , string_value )
values ( '.$some_number.' , "'.$some_text.'" )';
当我稍后从数据库中获取$some_text
时,它就会混淆像
don\'t
而不是将\r\n
之类的广告投放到输出中。
知道为什么会这样,我应该改变什么?
答案 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."' )";