Backtick (`) al posto degli apici singoli (') in un'istruzione SQL?

5 gen 2017, 00:33:46
Visualizzazioni: 14.2K
Voti: 3

Ho questo codice mostrato parzialmente per brevità:

global $wpdb;
// crea jwp_bids nel database se non esiste
$table = $wpdb->prefix . "jwp_bids"; 
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
    `id` mediumint(9) NOT NULL AUTO_INCREMENT,
    `bid_amt` text NOT NULL,

Quando ho scritto originariamente il codice, ho usato ' tra le parentesi e il codice non funzionava.

Poi ho cambiato gli apici singoli con i backtick e il codice ha funzionato perfettamente.

Qualcuno potrebbe spiegare:

  • Qual è il termine corretto per questi strani simboli :)
  • Perché vengono usati invece di ' ?
  • Questo vale solo per MySQL? WordPress? PHP?
  • Dove posso trovare un riferimento tecnico per queste cose così non devo disturbare voi gentili persone?
sql
3
Commenti

Cosa succede se ometti completamente i backtick, funziona comunque? Sono abbastanza sicuro che si tratti di una sfumatura di MySQL e riguardi l'interpretazione dei nomi delle colonne come stringhe (quando si usano gli apici singoli) invece di identificarli come colonne (usando i backtick o niente affatto).

Howdy_McGee Howdy_McGee
5 gen 2017 00:40:42

Proverò a fare un test per verificare. Qual è la migliore risorsa di riferimento per MySQL dove queste cose sono spiegate?

James James
5 gen 2017 00:55:48

Ok, quindi funziona SENZA backtick. Qual è un buon riferimento tecnico per questi dettagli?

James James
5 gen 2017 01:49:16
Tutte le risposte alla domanda 1
2

I backtick e le virgolette standard (sia singole che doppie) hanno significati distinti in SQL. Le virgolette indicano una stringa letterale, mentre i backtick sono identificatori quotati. Questo non è specifico di WordPress, ma è un modo generale in SQL per quotare colonne o tabelle.

Ad esempio, immagina di eseguire una query che confronta due colonne:

SELECT * FROM wp_posts WHERE post_name = post_title

Se confronti con le virgolette singole ('post_name' = 'post_title') questo confronta le stringhe letterali, che non saranno mai uguali. Tuttavia, con i backtick, si riferisce alle colonne.

Perché usare i backtick? Se una colonna ha lo stesso nome di una parola riservata in SQL, o contiene spazi, devi quotarla. Ad esempio, se avessi una colonna chiamata count, dovresti quotarla ogni volta che la richiami, poiché COUNT() è una funzione (e quindi una parola riservata) in MySQL.

Vedi anche https://dba.stackexchange.com/questions/23129/benefits-of-using-backtick-in-mysql-queries

5 gen 2017 03:44:04
Commenti

"Se confronti con apici singoli ('post_title' = 'post_title') questo confronta le stringhe letterali, che non sono mai uguali." In realtà sembrano piuttosto uguali. Forse intendevi dire 'post_name' = 'post_title'?

Frhay Frhay
25 giu 2018 19:45:43

I backtick non sono un modo per quotare colonne o tabelle in SQL. Sono piuttosto specifici di MySQL.

Juan Cespedes Juan Cespedes
25 ott 2024 12:29:24