Php - când se utilizează citate simple, ghilimele duble și backlink-urile în mysql, cod q - a

Încerc să învăț cel mai bun mod de a scrie interogări. Înțeleg și importanța coerenței. Până în prezent, am folosit accidental ghilimele simple, citatele duble și backlink-urile fără nici un gând real.







În plus, în exemplul de mai sus, considerăm că "table", "col [n]" și "val [n]" pot fi variabile.

Care este standardul pentru acest lucru? Ce faci?

Am citit răspunsurile la întrebări similare aici pentru aproximativ 20 de minute, dar nu pare să existe un răspuns definitiv la această întrebare.

Backticks fi utilizat pentru tabelele identificator și coloane, dar necesar numai când identificatorul este rezervat MySQL cuvânt cheie sau când identificatorul cuprinde un caracter spațiu sau simboluri în afara domeniului limitat (cm. Mai jos). Adesea se recomandă evitarea utilizării cuvintelor rezervate ca identificatori sau tabele ale coloanelor, dacă este posibil, pentru a evita apariția de probleme.

Pentru valorile șirului, de exemplu, în lista VALUES (), ar trebui folosite citate simple. Citatele duble sunt acceptate de MySQL și pentru valorile șirului, dar citatele simple sunt acceptate pe scară largă de alte RDBMS-uri, așa că este bine să folosiți citate singulare în loc de ghilimele duble.

Prin urmare, folosind exemplul dvs., aș dubla șirul PHP și voi utiliza citate unice pentru 'val1', 'val2'. NULL este un cuvânt cheie MySQL și o valoare specială (non), deci nu este sortată.

Funcțiile legate de RDBMS (de exemplu, ACUM () în MySQL) nu ar trebui să fie citate, deși argumentele lor respectă aceleași reguli sau reguli de citare deja menționate.

Interpolare variabilă

Referirea pentru șabloane variabile nu se schimbă, însă, dacă intenționați să interpola variabile direct în rândul, acesta trebuie să fie afișat de două ori în PHP. Asigurați-vă că ați evitat corect variabilele pentru a fi utilizate în SQL. (În schimb, este recomandat să utilizați API-ul care acceptă instrucțiunile pregătite, ca protecție împotriva injectării SQL).

Întrebări pregătite

Caractere care returnează un backlink în identificatori:

Conform documentației MySQL. nu este necesar să specificați un backtick utilizând următorul set de caractere:

ASCII: [0-9, az, AZ $ _] (litere latine de bază, numere 0-9, dolar, subliniere)

Puteți utiliza caractere mai mari decât cele setate ca ID-uri de tabel sau coloană, cum ar fi spații, dar trebuie să le specificați (invers).

Există două tipuri de citate în MySQL:

  1. 'Pentru a include literali de șir
  2. `Să includă identificatori, cum ar fi nume de tabele și coloane

Și atunci există „un caz special. Se poate folosi unul dintre obiectivele menționate mai sus, la un moment dat în funcție de serverul sql_mode sql_mode.

  1. În mod implicit, "caracterul" poate fi folosit pentru a încorpora literalurile de caractere "
  2. În modul ANSI_QUOTES, caracterul poate fi folosit pentru a include și identificatorii, `

Următoarea interogare va duce la rezultate diferite (sau erori) în funcție de modul SQL:

ANSI_QUOTES este dezactivat

Interogarea va selecta o coloană literală "coloană" unde coloana foo este egală cu șirul "bar"

A fost activat ANSI_QUOTES

Interogarea va selecta coloana coloanei în care coloana foo este egală cu coloana coloanei

Când să utilizați

  • Vă sugerez să evitați utilizarea "astfel încât codul dvs. să nu depindă de modurile SQL
  • Identificați întotdeauna identificatorii, deoarece aceasta este o practică bună (câteva întrebări despre SO discută acest lucru)






(Există răspunsuri bune mai sus în ceea ce privește natura interogării dvs. SQL, dar acest lucru poate fi, de asemenea, relevant dacă sunteți nou în PHP.)

Poate că este important să rețineți că PHP gestionează ghilimele simple și duble în moduri diferite.

Corzile cu o cotație sunt literale și reprezintă liniile WYSIWYG. Corzile dublu-cotate sunt interpretate de PHP pentru o înlocuire posibilă a variabilei (backlink-urile către PHP nu sunt exact șiruri, execută comanda în shell și returnează rezultatul).

Backtick-urile sunt utilizate în mod obișnuit pentru a se referi la un identificator și pot fi, de asemenea, sigure de utilizarea accidentală a cuvintelor cheie rezervate.

Aici, ticlurile din spate ajută serverul să înțeleagă că baza de date conține numele bazei de date, nu ID-ul bazei de date.

Același lucru se poate face pentru nume de tabele și nume de câmpuri. Acesta este un obicei foarte bun dacă legați identificatorul bazei de date folosind backlink.

Consultați acest răspuns pentru a afla mai multe despre constatările inverse.

Dar pentru a determina valoarea, trebuie să utilizați citate simple sau duble. Să vedem un alt exemplu.

Aici am uitat în mod deliberat să împachetez titlul1 cu citate. Acum serverul va prelua titlul1 ca nume al coloanei (adică identificatorul). Deci, pentru a specifica valoarea sa, trebuie să utilizați ghilimele duble sau simple.

Acum, folosind citatele duble în PHP, faceți variabilele $ val1 și $ val2 să le utilizați valorile, creând astfel interogarea corectă. ca

String-urile în MySQL și PHP sunt aceleași.

Un șir este o secvență de octeți sau simboluri, caractere incadrate intre ghilimele simple ( „“) sau ghilimele duble ( „“ „).

Prin urmare, în cazul în care șirul conține ghilimele simple, puteți utiliza ghilimele pentru a cita șir, sau în cazul în care conține ghilimele, atunci puteți folosi ghilimele simple pentru citare șir. Dar dacă șirul dvs. conține atât citate simple, cât și citate duble, trebuie să evitați cel folosit pentru a cita șirul.

Practic, folosim citate simple pentru valoarea șirului SQL, deci trebuie să folosim citate duble pentru șirul PHP.

Și puteți utiliza o variabilă într-un șir cu citate dublă PHP:

Dar dacă $ val1 sau $ val2 conține ghilimele simple, acest lucru va face SQL greșit. Prin urmare, trebuie să scăpați de el înainte de a fi folosit în sql; Aceasta este ceea ce este pentru mysql_real_escape_string. (Deși declarația pregătită este mai bună.)

În principiu în Mysql, aceste tipuri de identificatori sunt folosite în interogările `. “. și ().

"Utilizați pentru a include un tabel dintr-un tabel sau un tabel, de exemplu, selectați numele_conectat de la table_name unde id =" 2 "

() Folosiți doar pentru a închide pur și simplu părți ale interogării, de exemplu, selectați numele_paginei de la table_name unde (id = '2' și gender = 'male') sau name = 'rakesh'.

În combinație PHP și MySQL, citatele duble și citatele simple simplifică foarte mult timpul de scriere a solicitărilor.

Acum, să presupunem că utilizați o variabilă post direct într-o interogare MySQL, apoi folosiți-o astfel:

Aceasta este cea mai bună practică de utilizare a variabilelor PHP în MySQL.

Dacă tabelele și valorile colțurilor sunt variabile, atunci există două modalități:

Cu interogări complete "":

Cu un citat "".

Utilizați clicuri inversă `` `atunci când numele coloanei / valorii este similar cu cuvântul cheie de rezervă MySQL.

Notă. Dacă specificați un nume de coloană cu un nume de tabel, utilizați clicurile inverse după cum urmează:

`Table_name`. `column_name` <- Примечание: исключить. Со спины

Pentru valorile șirului, de exemplu, în lista VALUES (), ar trebui folosite citate simple.

Backticks-urile sunt de obicei utilizate pentru a se referi la un identificator și pot fi, de asemenea, sigure din cauza utilizării aleatoare a cuvintelor cheie rezervate.

În combinație PHP și MySQL, citatele duble și citatele simple simplifică foarte mult timpul de scriere a unei interogări.

Au fost multe răspunsuri utile, în general, culminând cu două puncte.

  1. BACKTICKS (`) sunt folosite în jurul numelor identificatorilor.
  2. QUOTES (') sunt folosite în jurul valorilor.

Și așa cum a spus @MichaelBerkowski

Pentru identificatorii de tabel și coloană ar trebui să se utilizeze spate, dar numai dacă identificatorul este un cuvânt cheie MySQL rezervat sau când identificatorul conține caractere sau caractere spațiale în afara unui set restrâns (a se vedea mai jos). Adesea se recomandă evitarea utilizării cuvintelor rezervate ca identificatori sau tabele ale coloanelor, dacă este posibil, pentru a evita apariția de probleme.

Există un caz în care identificatorul nu poate fi un cuvânt cheie rezervat sau poate conține spații sau caractere care se află în afara setului restricționat, dar necesită în mod necesar backlink în jurul acestora.

123E10 este un nume valabil al identificatorului, dar și un literal valid INTEGER.

[Fără a intra în detalii, cum obțineți un astfel de nume de identificator] Să presupunem că vreau să creez un tabel temporar numit 123456e6.

FĂRĂ MISTAKES pe backticks.

EROARE dacă nu utilizați apeluri de apel.

Cu toate acestea, 123451a6 este numele perfect al identificatorului (fără semnale spate).

Acest lucru este complet deoarece 1234156e6 este, de asemenea, un număr exponențial.







Trimiteți-le prietenilor: