Alternativa a mysql_real_escape_string
Ho un plugin WordPress in cui ad un certo punto ho bisogno di verificare se un determinato titolo esiste nel database. Per 2 anni, questo codice ha funzionato bene:
$myposttitle= $wpdb->get_results(
"select post_title from $wpdb->posts
where post_title like '%". mysql_real_escape_string($myTitle) . "%'"
);
Tuttavia, con PHP 5.5 e WP 3.9.1, questo causa un errore perché la funzione mysql_real_escape_string è deprecata.
Avete idee su quale altra funzione possa eseguire correttamente l'escape del contenuto di $myTitle ora che non posso più usare mysql_real_escape_string?
Grazie
Sebbene la risposta data riguardo a prepare() sia parzialmente corretta, se hai bisogno di un modo per manualmente escapare una stringa per un'istruzione SQL, usa esc_sql().
Per il caso specifico di escapare una stringa da inserire all'interno di un'istruzione LIKE, allora dovrebbe essere scritto più correttamente così:
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $wpdb->esc_like( $myTitle ) . "%"
);
L'uso di $wpdb->esc_like() è necessario per escapare correttamente eventuali segni di percentuale, underscore o backslash che potrebbero essere presenti nella frase da ricercare. Nota che $wpdb->esc_like() non restituisce input preparato, ma si limita a escapare i caratteri speciali utilizzati in un LIKE. Pertanto, prepare() è ancora necessario.
Quando lavori con il database in WordPress non dovresti mai usare le funzioni di basso livello mysql_* o mysqli_*.
Utilizza sempre i metodi di $wpdb, nel tuo caso dovresti usare prepare():
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $myTitle . "%"
);
Inoltre, quando stai recuperando una singola colonna, hai la vita più semplice usando get_col invece di get_results:
$myposttitle = get_col( $query );
Grazie... molto apprezzato. Tuttavia, questo non gestirà il problema di escape che ho menzionato, vero?
Allen