ユーザーが製品コードを入力すると結果が返される製品検索エンジンを作りたいのですが、これは簡単です。
しかし、文字のように見える数字とその逆を補正できるようにしたいと考えています。
たとえば、ユーザーは 6O12l と入力しますが、製品コードは実際には 60121 です。
6O12l および/または 60121 を持つすべての製品を元に戻すには、SQL クエリに何を入力する必要がありますか?
これまでのところ、これは機能していません。何を入力しても、毎回同じ結果が返され続けます。
$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 のマングルされた出力が得られます