我需要允许特殊字符,包括'在MySQL中。我有一个" bio"允许用户数据的文本字段,我正在使用POST方法。 我的PHP包含在内:
$uid = $_POST["UID"];
$bio = $_POST["bio"];
$update_query = "UPDATE `User` SET bio = '$bio' WHERE uid = '$uid';";
$conn->query( $update_query );
$conn->close()
所有用户都经过验证,因此不允许他们使用特殊字符。如何更新我的代码?
答案 0 :(得分:1)
@Alex Tartan绝对正确,你应该使用预备语句。他们不仅完全解决了这个问题,而且还在很大程度上保护您免受恶意用户的攻击。这是一个例子:
$host = 'localhost';
$db = 'my_database';
$user = 'my_username';
$pass = 'my_password';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
];
$pdo = new PDO($dsn, $user, $pass, $opt);
$stmt=$pdo->prepare("UPDATE `User` SET bio = :bio WHERE uid = :uid");
$stmt->bindParam('bio', $_POST['bio']);
$stmt->bindParam('uid', $_POST['UID']);
$stmt->execute();
这是非常有价值的原因是变量值(例如,$_POST['bio']
的内容)从SQL查询中分离发送到数据库。因此,它们不需要特殊处理,并且可能包含您的角色设置允许的任何内容。
答案 1 :(得分:1)
您可以使用mysqli_real_escape_string()
函数转义字符串。这是一些Documentation。基本上,您传入连接和字符串,并返回一个安全字符串以输入到您的数据库中。
在你的情况下,你会做这样的事情:
$uid = mysqli_real_escape_string($conn, $_POST["UID"]);
$bio = mysqli_real_escape_string($conn, $_POST["bio"]);
ps:你应该总是在php中使用mysqli