我正在尝试为我的数据库创建一个简单的Web界面,我正在使用预准备语句,因为它们应该可以防止SQL注入攻击。无论如何,我的问题是,如果我在表单中输入单引号或双引号并提交它,那么它们将被输入数据库,前面加一个反斜杠,当从数据库中选择项目时,也会打印出来。
那么,如果没有因为prepare语句而要求前面的反斜杠,如何在数据库中输入文字引用?欢呼声。
<?php
$heading = $_POST['heading'];
$story = $_POST['story'];
$mysqli = new mysqli('localhost',$username,$password,'mydb');
if ($mysqli->connect_errno)
echo "Failed to connect: Error (".$mysqli->connect_errno.") ".$mysqli->connect_error;
if ( !$stmt = $mysqli->prepare('INSERT INTO news (heading,story) VALUES (?,?)') )
echo "Prepare failed: Error (".$mysqli->errno.") ".$mysqli->error;
if ( !$stmt->bind_param('ss',$heading,$story) )
echo "Binding paramaters failed: (".$stmt->errno.") ".$stmt->error;
if (!$stmt->execute())
echo "Execute failed: (".$stmt->errno.") ".$stmt->error;
$stmt->close();
?>
答案 0 :(得分:1)
使用htmlspecialchars()
将特殊字符转换为HTML实体或mysql_escape_string()
以转义所有“奇怪”符号
答案 1 :(得分:1)
确保在php.ini中关闭magic_quotes。
答案 2 :(得分:0)
您是否考虑使用任何本机PHP函数,如mysql_real_escape_string()或addslashes()?
这些功能本身可以避免插入潜在危险的字符串。