2

好的,我已经做了 1 个小时了。我错过了一些非常简单的东西?我需要对此有新的看法吗?我在这里搜索并找到了一些东西并尝试实施,但仍然没有完成。

我关闭了魔术引号:

我的搜索是山姆会员店

在数据库中,它也被输入为:Sam 's Club

简单的搜索功能:

$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 的两张图片:

在此处输入图像描述

在此处输入图像描述

解决了

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

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

4

2 回答 2

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."%')";
于 2013-05-02T19:16:10.833 回答
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);
于 2013-05-02T19:29:51.447 回答