我有一个奇怪的问题。
我有一个有标题字段的表
我正在使用mysql_real_escape_string
将值插入此标题字段。对于带单引号的值,插入工作正常
我正在使用where子句中提交的标题进行选择的其他地方,如下所示
SELECT * FROM table WHERE title=mysql_real_escape_string(Girish's Photo);
即使我插入Girish的Photo,此查询也会返回空结果集。
----编辑放一些代码
$photo_title=mysql_real_escape_string($_POST[photo_title]);<br/>
$sql = "INSERT INTO photos values($id,'$photo_title');<br/>
从我已将 Girish的照片插入到photo_title的表格中使用此功能。它工作得很好。
...
..
..
然后在PHP的其他地方
$title="Girish's Photo";
$sql = "SELECT photo_id,photo_title FROM photos WHERE photo_title ='" . mysql_real_escape_string($title)."'" ;
但是此查询返回空结果集。
使用phpMyAdmin,如果我尝试运行上面的查询..结果为空。如果我浏览表格,我会看到价值Girish的照片
现在如果我在phpMyAdmin上运行查询替换where子句,其中photo_title ='Girish \'的照片'我正在获取记录。
答案 0 :(得分:3)
$data = "Girish's Photo";
$query = "SELECT * FROM table WHERE title='".mysql_real_escape_string($data)."'";
答案 1 :(得分:1)
mysql_real_escape_string()
是一个PHP函数,应该按如下方式使用:
"SELECT * FROM table WHERE title='".mysql_real_escape_string("Girish's Photo")."'";
然而,这是不好的做法。
答案 2 :(得分:0)
最近我遇到了类似的问题,我使用htmlentites()
代替mysql_real_escape_string()
在the manual或w3 schools
编辑:这是一个有效的答案,因为他首先在错误的上下文中使用mysql_real_escape_string()
。如果你读到这个问题,他就会逃避一个FILENAME,因此他没有注射的风险。如果你打算至少说出原因......
答案 3 :(得分:0)
好的,所以你会想要将PDO用于所有查询。主要有以下原因:
请查看这篇文章,了解如何使用PDO发布SELECT。
答案 4 :(得分:0)
数据库中的值应 不 包含反斜杠。这就是您的查询与不匹配的原因。 Girish's Photo
与Girish\'s Photo
不符。听起来你是magic quotes的受害者。阅读the manual并删除它们。