php搜索功能失败,单引号输入

时间:2013-05-02 19:11:16

标签: php mysql search

好的,我现在已经在这1小时了...我遗失的东西很简单?我需要一套新的眼睛吗?我在这里搜索并发现了一些事情并试图实施,但仍然很短暂。

我关掉了魔法引号:

我的搜索适用于 Sam's Club

在数据库中,输入为: Sam&#39俱乐部

简单搜索功能:

$q = htmlspecialchars($q);
// changes characters used in html to their equivalents, for example: < to &gt;
$q = mysql_real_escape_string($q);
// makes sure nobody uses SQL injection

$raw_results = mysql_query("SELECT * FROM this, this2 WHERE this.TypeID = this2.TypeID AND this.status = 'Active' AND this.endDate >= CURDATE()
AND (`Title` LIKE '%".$q."%')") or die(mysql_error());

仍然空洞的结果?

显然,如果我搜索 Sam ,它会查询结果吗?

以下是我的phpMyAdmin中的两张图片:

enter image description here

enter image description here

解决

我发现了问题。我在我的标题中包含了另一个我忘记的函数列表。这搞乱了变量。

感谢您排除故障!我还是学到了很多!!

2 个答案:

答案 0 :(得分:3)

我建议摆脱htmlspecialchars()将您的报价转换为&apos;甚至&#039;

因此,当它尝试搜索数据库时,它会使用Sam&apos;s ClubSam&#039;s Club作为您的搜索,但它不会存在,因为它保存为:Sam's Club

$q = mysql_real_escape_string($q);
// makes sure nobody uses SQL injection

$raw_results = mysql_query("SELECT * FROM this, this2 WHERE this.TypeID = this2.TypeID AND this.status = 'Active' AND this.endDate >= CURDATE()
AND (`Title` LIKE '%".$q."%')") or die(mysql_error());



请运行此命令并使用生成的字符串进行回复。

$q = mysql_real_escape_string($q);
echo "SELECT * FROM this, this2 WHERE this.TypeID = this2.TypeID AND this.status = 'Active' AND this.endDate >= CURDATE() AND (`Title` LIKE '%".$q."%')";

答案 1 :(得分:1)

试试这段代码:

   echo 'value q before=*' . $q . '*';

   $q = mysql_real_escape_string($q);
   echo 'value q after=*' . $q . '*';
   $q2 = mysql_escape_string($q);
   echo 'value q2 after=*' . $q2 . '*';

    // makes sure nobody uses SQL injection

    $sql = "SELECT * FROM this, this2 WHERE this.TypeID = this2.TypeID AND this.status = 'Active' AND this.endDate >= CURDATE() AND `Title` LIKE '%".$q."%'";
    echo 'SQL STRING=*'.$sql.'*';
    $raw_results = mysql_query($sql) or die(mysql_error());
    echo 'RAW RESULTS=' . print_r($raw_results, true);