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?
