好的,我现在已经在这1小时了...我遗失的东西很简单?我需要一套新的眼睛吗?我在这里搜索并发现了一些事情并试图实施,但仍然很短暂。
我关掉了魔法引号:
我的搜索适用于 Sam's Club
在数据库中,输入为: Sam&#39俱乐部
简单搜索功能:
$q = htmlspecialchars($q);
// changes characters used in html to their equivalents, for example: < to >
$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中的两张图片:
解决
我发现了问题。我在我的标题中包含了另一个我忘记的函数列表。这搞乱了变量。
感谢您排除故障!我还是学到了很多!!
答案 0 :(得分:3)
我建议摆脱htmlspecialchars()
将您的报价转换为'
甚至'
。
因此,当它尝试搜索数据库时,它会使用Sam's Club
或Sam'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);