如何使用以下代码允许使用“'\ /:;等特殊字符而不打开SQL注入:
$opendb = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
$text = $_POST['text'];
mysql_query("UPDATE table SET text='" . $text . "' WHERE
id='" . $_GET['id'] . "'");
mysql_close($opendb);
$text
包含来自HTML textarea的句子。当我尝试在引号中输入文本时,只需在引号前插入文本。
答案 0 :(得分:-2)
好吧,也许最简单的解决方案就是使用mysql_real_escape_string()函数:
$opendb = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
$text = $_POST['text'];
mysql_query("UPDATE table SET text='" . mysql_real_escape_string($text) . "' WHERE
id='" . $_GET['id'] . "'");
mysql_close($opendb);
编辑: 使用此代码,您可以允许将$ text变量中的特殊字符保存到数据库中。
你也应该逃避$ _GET [' id']。
答案 1 :(得分:-2)
这是最安全的方法。请查看此链接了解更多信息:How can I prevent SQL injection in PHP?
您可能还需要关闭魔术引号,具体取决于您运行的PHP版本。
<?php
if( isset($_POST['text']) && isset($_GET['id']) &&
is_int($_GET['id']) && $_GET['id']>0 ){
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = 'UPDATE table SET text = ? WHERE id = ?';
/* prepare your statement safely */
$stmt = $mysqli->prepare($query);
/* bindes variables after statement is prepared */
$stmt->bind_param('si', $_POST['text'], $_GET['id']);
/* execute prepared statement */
$stmt->execute();
/* close statement */
$stmt->close();
/* close connection */
$mysqli->close();
}else
echo 'Error: ID and/or Text are invalid';
?>