以下是原始代码:
if (($handle = fopen($source_file, "r")) !== FALSE) {
$columns = fgetcsv($handle, $max_line_length, ",");
foreach ($columns as &$column) {
$column = str_replace(".","",$column);
}
while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) {
while(count($data) < count($columns)) {
array_push($data, NULL);
}
$c = count($data);
for($i = 0; $i < $c; $i++) {
$data[$i] = "'{$data[$i]}'";
}
$sql[] = '(' . implode(',', $data) . ", '" . $_POST['custgroup'] . "'," . $_POST['user_id'] . ')';
}
$query = "INSERT INTO $target_table (" . implode(',', $columns) .
',custgroup,user_id) VALUES ' . implode(',', $sql);
//mysql_query($query) or trigger_error(mysql_error());
echo $query;
fclose($handle);
}
但是一旦我添加了mysql_real_escape_string:
$query = "INSERT INTO $target_table (" . implode(',',array_map('mysql_real_escape_string', $columns)) .
',custgroup,user_id) VALUES ' . implode(',',array_map('mysql_real_escape_string', $sql));
查询将变为:
INSERT INTO UserAddedRecord (lastname,firstname,ceLL,fax,email,code,custgroup,user_id) VALUES (\'Last\',\'First\',\'01122331\',\'\',\'abc@hotmail.com\',\'12345\', \'\',17)
我检查了我的php.ini和get_magic_quotes_gpc(),魔术引用被禁用。
magic_quotes_gpc =关
magic_quotes_runtime =关
magic_quotes_sybase =关
应该是什么问题?或者我应该只应用stripslashes()?但我认为只有在启用魔术引用时才会使用它。
答案 0 :(得分:3)
你应该采取以下措施:
mysql_real_escape_string
mysql_real_escape_string的目的是逃避测试内容中的特殊字符,因此使用stripslashes会将其删除。
解决这个问题的另一种方法是调查preparedStatements
,而不需要客户端进行esacping。
请记住,执行此操作的重点是阻止SQL-Injection并采取相应措施:)