2012-04-12 4 views
10

Ich versuche die Anzahl der Zeilen zu finden, die einem bestimmten Muster entsprechen. In diesem Beispiel sind alle, die mit „123“ START:Wie PHP-String in mySQL LIKE-Abfrage verwenden?

Dies funktioniert:

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'"); 
$count = mysql_num_rows($query); 

Das Problem variiert die LIKE ist, so versuche ich es im Skript zu definieren, führen Sie dann die Abfrage, aber das funktioniert nicht:

$prefix = "123"; 
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'"); 
$count = mysql_num_rows($query); 

Wie kann ich diese Abfrage im zweiten Beispiel richtig funktioniert?

EDIT: Ich habe versucht, es auch ohne die Zeit (auch nicht funktioniert):

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'"); 
+0

John, etwas, das ich gefunden habe, der mir hilft, wenn Variablen in Zeichenketten verwendet wird, ist die geschweiften Klammern zu verwenden. '$ var1 =" foo "; $ var2 = "{$ var1} bar"; echo $ bar2; 'Wird ausgegeben: foo bar und Sie müssen sich keine Gedanken über Verkettungen usw. machen. Funktioniert nicht so, wie Sie vielleicht denken, mit einfachen Anführungszeichen für Strings. – Blake

Antwort

15

Sie die Syntax falsch haben; Es ist nicht erforderlich, einen Punkt innerhalb einer Zeichenfolge mit doppelten Anführungszeichen zu platzieren. Stattdessen sollte es eher wie

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$prefix%'"); 

sind Sie können dies bestätigen, indem Sie die Zeichenfolge Druck, um zu sehen, dass es auf den ersten Fall identisch ausfällt.

Natürlich ist es keine gute Idee einfach Variablen in den Abfrage-String wie folgt injizieren wegen der Gefahr der SQL-Injektion. Zumindest sollten Sie manuell den Inhalt der Variablen entkommen mit mysql_real_escape_string, was wäre es vielleicht wie folgt aussehen:

$sql = sprintf("SELECT * FROM table WHERE the_number LIKE '%s%%'", 
       mysql_real_escape_string($prefix)); 
$query = mysql_query($sql); 

Beachten Sie, dass in dem ersten Argument von sprintf das Prozentzeichen am Ende verdoppelt werden muss erscheint einmal im Ergebnis.

+0

Fantastisch. Ich danke dir sehr! – JROB

+2

Es besteht die Gefahr einer Injektion, wenn Sie vom Benutzer eingegebene Daten verwenden. Es besteht keine Gefahr für: '$ var =" rawr "; ... query ("SELECT * FROM tabelle WHERE col = '{$ var}'"; "Sie steuern Ihre eigenen Daten auf dem Server. – Blake

+0

@Blake: Offensichtlich, aber ich fühle mich verpflichtet, es trotzdem zu sagen. Code hat a Möglichkeit, an andere Kontexte angepasst zu werden als an den, für den sie gedacht war. – Jon

3

Machen Sie es wie

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$yourPHPVAR%'"); 

Sie das % am Ende nicht vergessen

Verwandte Themen