我有一个博客文章的表格,每当我有一个单引号(例如那个)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修复了问题
答案 0 :(得分:0)
你应该使用准备好的语句,PDO使这很容易。那你就不需要引号了。
答案 1 :(得分:0)
作为旁注,如果值( s )来自外部,则查询容易被SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。
答案 2 :(得分: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的结果是“那个更糟糕的”。 任何不以Invalid开头的回显字符串表示问题正常运行。 注意2:这是连接服务器的正确方法。
编辑:如果你想使用mySqli连接,请使用以下代码进行连接,因为你是以错误的方式进行连接:
$mysqli = @new mysqli('yourDBaddress', 'yourDBuserName', 'yourDBpassword', 'yourDBname');
if ($mysqli->connect_errno) {
die('Connect Error: ' . $mysqli->connect_errno);
}