Alternativă pentru mysql_real_escape_string
Am un plugin WordPress în care la un moment dat trebuie să verific dacă un anumit titlu există în baza de date. Timp de 2 ani, acest cod a funcționat bine:
$myposttitle= $wpdb->get_results(
"select post_title from $wpdb->posts
where post_title like '%". mysql_real_escape_string($myTitle) . "%'"
);
Cu toate acestea, cu PHP 5.5 și WordPress 3.9.1, acest lucru cauzează o eroare deoarece funcția mysql_real_escape_string
este deprecată.
Aveți idei despre ce altă funcție va escapa corect conținutul variabilei $myTitle
acum că nu mai pot folosi mysql_real_escape_string
?
Mulțumesc
Deși răspunsul dat cu prepare()
este parțial corect, dacă ai nevoie de o metodă pentru a escapa manual un șir de caractere pentru o declarație SQL, folosește esc_sql()
.
Pentru cazul specific de escapare a unui șir de caractere care urmează să fie plasat într-o declarație LIKE, atunci ar trebui să fie scris mai corect astfel:
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $wpdb->esc_like( $myTitle ) . "%"
);
$wpdb->esc_like() este necesar pentru a escapa corect orice semn de procent, underscore sau backslash care ar putea fi în fraza căutată. Reține că $wpdb->esc_like() nu returnează input pregătit, ci doar escapează caracterele speciale utilizate într-un LIKE. Astfel, prepare() este încă necesar.

Când lucrați cu baza de date în WordPress, nu ar trebui să folosiți niciodată funcțiile de nivel scăzut mysql_*
sau mysqli_*
.
Utilizați întotdeauna metodele $wpdb
, în cazul dvs. ar trebui să folosiți prepare()
:
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $myTitle . "%"
);
Mai mult, dacă obțineți o singură coloană, aveți viața mai ușoară folosind get_col
în loc de get_results
:
$myposttitle = get_col( $query );

Mulțumesc... apreciez. Totuși, asta nu va rezolva problema de escapare pe care am menționat-o, nu-i așa?
