我想制作一个产品搜索引擎,用户输入产品代码并返回结果,这很容易。
但是,我希望能够补偿看起来像字母的数字,反之亦然。
例如,用户键入 6O12l,但产品代码实际上是 60121。
我需要在 SQL 查询中添加什么来恢复所有带有 6O12l 和/或 60121 的产品?
到目前为止,我有这个不起作用,无论我输入什么,它每次都会返回相同的结果:
$searchString = $_POST['query'] ;
$searchString = preg_replace('#\W#', '', $searchString);
$firstLetter = substr($searchString, 0, 1) ;
include("db.php") ;
$result = $dbh->prepare("SELECT productCode
FROM products
WHERE productCodeREGEXP '6[O0]12[1l]'
AND productCode LIKE '$firstLetter%'") ;
$result->execute() ;
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo $row['productCode'].'<br />' ;
}
我设法让它工作,但我遇到了一个新问题。
我正在使用 str_replace 将字母替换为用户查询字符串中的数字,反之亦然,但它仅适用于其中一个,而不适用于两者:
$qString = str_replace(array('o', 'l', '0', '1'), array('[O0]', '[1l]', '[O0]', '[1l]'), $searchString) ;
这给了我一个错误的输出,例如 A[[1l]l]BC 而不是 A[1l]BC