我打算使用以下代码显示100个汽车品牌的一些销售数字:
$brand = str_replace ('-', '[- ]', $_GET['brand']);
$sql = "SELECT year, brand, number FROM `exampletable` WHERE brand REGEXP :brand ORDER BY `year` DESC";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":brand", $brand);
$stmt->execute();
if($stmt->rowCount())
{ while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<?php echo $result['year'];?>
<?php echo $result['number'];?>
<?php }} else { echo '0'; } ?>
现在这个代码适用于我桌上的98个品牌,但是以下品牌存在问题,因为它们包含相同的字词:
因此,&#34; Matra Renault&#34;不仅会出现在该品牌的特定网页上,还会出现在&#34;雷诺&#34;的网页上。同样的事情发生在&#34;大众汽车&#34;我在哪里看到#34;大众保时捷&#34;同样。
所以,我完全理解为什么我的代码不起作用,但我对这个主题没有足够的知识来寻找快速的解决方案。我已经在这里阅读了较旧的问题,但似乎没有人讨论同样的问题。
注意:由于将来我的表中不会添加其他数据,因此专门针对上述品牌的解决方案就足够了。
答案 0 :(得分:2)
问题是您选择了REGEXP
,而您显然不需要它。正则表达式意味着Volkswagen
将匹配品牌名称中Volkswagen
的任何内容,因此您可以获得其他不需要的结果,特别是因为您的正则表达式只是整个品牌名称。
注意,顺便提一下,搜索Volkswagen Porsche
不会返回Volkswagen
,因为Porsche
不在其中。请参阅this simplified example vs this。
问题的解决方案是只需使用=
选择您要查找的品牌的确切名称:
$sql = "SELECT year, brand, number FROM `exampletable` WHERE brand = :brand ORDER BY `year` DESC";
另一个解决方案,虽然完全矫枉过正,但是要修正你的正则表达式以完全匹配单词:
$brand = "^".$brand."\$";
然后,它只会查找完全匹配。 See example