【发布时间】:2012-07-02 05:26:50
【问题描述】:
我想做一个产品搜索引擎,用户输入产品代码,它会返回结果,这很容易。
但是,我希望能够补偿看起来像字母的数字,反之亦然。
例如用户输入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
【问题讨论】: