-2

如何使用以下代码在不打开 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 文本区域的句子。当我尝试在引号中输入文本时,它只需在引号之前插入文本。

4

2 回答 2

-2

准备好的声明

这将是最安全的方法。查看此链接了解更多信息:如何防止 PHP 中的 SQL 注入?

您可能还需要关闭魔术引号,具体取决于您正在运行的 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';
?>
于 2013-09-12T15:22:27.290 回答
-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'] 。

于 2013-09-12T12:07:21.623 回答