Som redan nämnts i frågan frågan
$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
. 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'
fungerar för att matcha poster där SEARCHFIELD
innehåller ett ord som börjar med (eller är lika med) $searchText
Angående prestanda har jag gjort ett test på min utvecklingsmaskin MBP 2,2 GHz i7 quad core
:
Att söka efter ett ord på 4 000 poster tar cirka 40 millisekunder.
Poster indexeras normalt (ingen fulltext).
Jag har några tusen poster och frågan körs inte så ofta så för mig är det bra.
Lösningen kanske inte passar för andra sammanhang.
För att bygga ett förberett uttalande med ovanstående fråga använde jag tekniken som beskrivs här:
Den resulterande koden är som följer:
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 );
/* ... */