2012-04-05 6 views
1

Ich habe die folgende MySQL-Abfrage in PHP:php mysql query - Ausgangswert der Variablen in der Abfrage

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%details%'"); 

Allerdings möchte ich die Abfrage durch Änderung der LIKE Abschnitt der Abfrage dynamisch. Statt:

LIKE '%details%' 

möchte ich in eine Variable setzen:

LIKE '% $format %' 

wo $ Format eine Zeichenfolge ist.

Alles, was ich bis jetzt versucht habe, ist gescheitert.

Was ist der richtige Weg, dies zu tun?

+0

Es gibt viele Möglichkeiten, dies zu tun, aber der richtige Weg ist die Verwendung parametrisierter Abfragen. Denken Sie daran, kleine Bobby Tables ... http://xkcd.com/327/ –

+0

Hier ist eine große Frage zum Thema: http://StackOverflow.com/Questions/60174/best-way-to-stop-sql-injection-in -php –

Antwort

0

Versuchen Verpackung in Klammern:

LIKE '%{$format}%' 
0

Da Sie doppelte Anführungszeichen verwenden können Sie einfach tun:

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%$format%'"); 

Oder einfach die Zeichenfolge verketten:

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%" . $format . "%'"); 
0

Ihre Zeichenfolge bereits in Anführungszeichen, also einfach Ihre Variable mit geschweiften Klammern umgeben und Sie sollten gut gehen.

"SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%{$format}%'" 
0

Bevor die Variable vorbei tun dies

$format = '%' . $format . '%'; 
now simply put it in the query. 

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '$format'"); 
0

Sie haben bereits die Antwort. Ich kann es genau so machen wie du willst.

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%$details%'"); 

Da die Abfrage in doppelten Anführungszeichen eingewickelt ist, können Sie nicht nichts entkommen müssen.