我正在将大量信息从XML文件写入数据库。
一切正常,直到我遇到一个带有'在描述中的字段,插入失败并出现错误
Error 1064:You have an error in your SQL syntax; check the manual that
对应于您的MySQL服务器 用于正确语法的版本 附近'我希望你也能感受到这种感觉。 我们很乐意拜访我们观看 在第3行超过100'
有没有办法让它插入而不会失败?导入文件可能很大并且会定期更改,因此我无法搜索和替换其中的字符。
我的实际PHP声明是:
$query = mysql_query("REPLACE into list
(id, name, link, description, cost, date_added,type,myipaq,private,imgurl)
VALUES ('$id','$name','$link',"'$description'",'$cost','$date','$type','$myipaq','$private','$imgurl')");
提前感谢,
格雷格
答案 0 :(得分:6)
这属于SQL注入类别。
在PHP中有一个函数:mysql_real_escape_string用于对字符串进行编码,这样它就不会影响它可能连接成的SQL语句。
所以确保你的所有值都通过mysql_real_escape_string函数,你会没事的。
API REF:http://php.net/manual/en/function.mysql-real-escape-string.php
答案 1 :(得分:1)
只需将您的数据传递到mysql_real_escape_string()
答案 2 :(得分:0)
使用我方便的花花公子功能:
function mysql_safe_string($value) {
if(is_numeric($value)) return $value;
elseif(empty($value)) return 'NULL';
elseif(is_string($value)) return '\''.mysql_real_escape_string($value).'\'';
elseif(is_array($value)) return implode(',',array_map('mysql_safe_string',$value));
}
function mysql_safe_query($format) {
$args = array_slice(func_get_args(),1);
$args = array_map('mysql_safe_string',$args);
$query = vsprintf($format,$args);
$result = mysql_query($query);
if($result === false) echo '<div class="mysql-error"><strong>Error: </strong>',mysql_error(),'<br/><strong>Query: </strong>',$query,'</div>';
return $result;
}
像这样:
mysql_safe_query('INSERT INTO table VALUES (%s, %s, %s)', $val1, $val2, $val3);
忘记引用或不引用字符串,并写出mysql_real_escape_string
十几次。
答案 3 :(得分:0)
使用PHP在数据库中插入或替换或实际与任何内容交互的唯一真正安全的方法是使用预准备语句。以任何其他方式做任何事都没有任何借口。使用mysql_real_escape_string转义字符串会给你一些保护,但它不是防弹。
准备好的陈述甚至都不难。请参阅它们上的PHP manual页面,有几个包装器可以让生活更轻松,我个人非常喜欢codesense mysqli wrapper并且已经使用了一段时间而没有任何问题 - 这并不比直接更难MySQL PHP代码。 EasyPDO看起来很有希望。
您应该查看相关问题"PHP: Is mysql_real_escape_string" sufficient for cleaning user input",了解更多有关您不应该懒惰的原因。
答案 4 :(得分:-1)
使用:php.net/manual/en/function.addslashes.php
添加斜杠只是为了防止!
如果你使用它,只需使用
http://www.php.net/manual/en/function.stripslashes.php
从字符串中删除斜杠!