我正试图为我的数据库制作一个简单的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();
?>
确保在php.ini中关闭magic_quotes。
您是否考虑过使用任何本地PHP函数,如mysql_real_aescape_string()或addslashes()?
这些函数将以本机方式避免插入潜在危险的字符串。
使用htmlspecialchars()
将特殊字符转换为HTML实体,或使用mysql_escape_string()
转义所有"奇怪"符号