我正在尝试为我的数据库创建一个简单的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();
?>发布于 2012-02-02 22:25:15
确保在php.ini中关闭了magic_quotes。
发布于 2012-02-01 17:59:20
您是否考虑过使用任何原生PHP函数,如mysql_real_escape_string()或addslashes()?
这些函数将本机避免插入潜在的危险字符串。
发布于 2012-02-01 18:00:45
使用htmlspecialchars()将特殊字符转换为HTML实体,或使用mysql_escape_string()转义所有«奇怪»符号
https://stackoverflow.com/questions/9093837
复制相似问题