Som allerede nævnt i spørgsmålet forespørgslen
$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
. 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'
fungerer til at matche poster, hvor SEARCHFIELD
indeholder et ord, der begynder med (eller er lig med) $searchText
Med hensyn til ydeevne har jeg lavet en test på min udviklingsmaskine MBP 2,2 GHz i7 quad core
:
At søge efter et ord på 4.000 poster tager omkring 40 millisekunder.
Poster er normalt indekseret (ingen fuldtekst).
Jeg har få tusinde poster, og forespørgslen kører ikke særlig ofte, så for mig er det godt.
Løsningen er muligvis ikke egnet til andre sammenhænge.
For at bygge en forberedt erklæring med ovenstående forespørgsel brugte jeg teknikken beskrevet her:
Den resulterende kode er som følger:
function like($s, $e)
{
return str_replace(array($e, '_', '%'), array($e . $e, $e . '_', $e . '%'), $s);
}
/* ... */
/* create a prepared statement */
$stmt = $mysqli->prepare(
'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE ? ESCAPE "=" OR SEARCHFIELD LIKE ? ESCAPE "="'
);
if( $stmt )
{
/* escape the text */
$escSearchText = like( $searchText, "=" );
/* 'like' parameters */
$like1 = $escSearchText . "%";
$like2 = "%" . $escSearchText . "%";
/* bind parameters for markers */
$stmt->bind_param( "ss", $like1, $like2 );
/* ... */