-1

我有一个博客文章的表格,每当我有一个单引号(例如,那是)时,SQL 插入代码就会中断。我尝试过使用 mysql_real_escape_string:

$Description = mysql_real_escape_string($_POST['Description']);

但这不起作用。我也尝试使用 htmlspecialchars(),但是对于这些帖子,我需要能够使用 HTML 代码来添加链接和图像。

我更新了 SQL 代码以像指南所说的那样做,但我仍然没有工作。然后如果没有单引号我可以更新它,所以代码确实有效,但是单引号会造成很多麻烦

        $SQL = "UPDATE Posts SET Title = '$Title',LinkTitle = '$LinkTitle',MainPicture = '$MainPic',Description ='".$Description."',Maintext = '$Main',Type = '$SubCategory',Featured = '$Featured'
    ,category = '$Category',thumbnail='$thumb'
    WHERE ID = '$id'";

使固定

感谢 Gaucho 的解决方案,问题是我使用 mysqli 连接到数据库。将连接代码更改为正常的 mysql_connect 解决了这个问题。

4

3 回答 3

0

您应该使用准备好的语句,PDO 使这很容易做到。那么你不需要引号。

于 2013-01-12T14:24:53.557 回答
0

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-12T14:25:21.870 回答
0

使用此代码以及您的数据库名称和密码,并报告您正在获取的错误。

mysql_real_escape_string 不是您查询中的问题,因为在我的情况下它工作正常。让我们知道您的 PHP 和 MySQL 版本。

 <?php
     // Connect to your database
     mysql_connect("localhost","yourDBuserName","yourDBpassword");

     // Specify database
     mysql_select_db("yourDBname") or die;

     //Build SQL query
     $Description = mysql_real_escape_string("that's amore");
     $query = "select * from Posts where Description ='" . $Description . "'";
     $queryResult=mysql_query($query);
     if (!$queryResult) {
         $message  = 'Invalid query: ' . mysql_error() . "\n";
         $message .= 'Whole query: ' . $query;
         die($message);
     }
     die ($queryResult);
 ?>

我什至建议你用 PhpEd 调试你的代码。注意:我的示例中 mysql_real_escape_string 的结果是“that\\'s amore”。任何不以 Invalid.. 开头的回显字符串都表示查询运行良好。

注意 2:这是连接到服务器的正确方法。

如果要使用 mySqli 进行连接,请使用以下代码进行连接,因为您的操作方式错误:

$mysqli = @new mysqli('yourDBaddress', 'yourDBuserName', 'yourDBpassword', 'yourDBname');

if ($mysqli->connect_errno) {
    die('Connect Error: ' . $mysqli->connect_errno);
}
于 2013-01-12T14:44:35.860 回答