Backticks sind für Tabellen- und Spaltenkennungen zu verwenden, sind jedoch nur erforderlich, wenn die Kennung ein reserviertes MySQL-Schlüsselwort ist oder wenn die Kennung Leerzeichen oder Zeichen enthält, die über einen begrenzten Satz hinausgehen (siehe unten). Es wird häufig empfohlen, die Verwendung reservierter Schlüsselwörter zu vermeiden wenn möglich als Spalten- oder Tabellenkennungen, um das Angebotsproblem zu vermeiden.
Für Zeichenfolgenwerte wie in der VALUES()
Liste sollten einfache Anführungszeichen verwendet werden . Doppelte Anführungszeichen werden von MySQL auch für Zeichenfolgenwerte unterstützt, aber einfache Anführungszeichen werden von anderen RDBMS häufiger akzeptiert. Daher ist es eine gute Angewohnheit, einfache Anführungszeichen anstelle von doppelten Anführungszeichen zu verwenden.
MySQL erwartet auch , DATE
und DATETIME
Literalwerte wie einfache Anführungszeichen als Zeichenfolge zu sein '2001-01-01 00:00:00'
. Konsultieren Sie Datum und Uhrzeit Literale Dokumentation für weitere Details, insbesondere Alternativen zu dem Bindestrich verwendet -
als Segmenttrennzeichen in Datumsstrings.
In Ihrem Beispiel würde ich die PHP-Zeichenfolge in doppelte Anführungszeichen setzen und einfache Anführungszeichen für die Werte verwenden 'val1', 'val2'
. NULL
ist ein MySQL-Schlüsselwort und ein spezieller (Nicht-) Wert und wird daher nicht in Anführungszeichen gesetzt.
Keine dieser Tabellen- oder Spaltenkennungen sind reservierte Wörter oder verwenden Zeichen, die in Anführungszeichen gesetzt werden müssen, aber ich habe sie trotzdem mit Backticks zitiert (dazu später mehr ...).
Funktionen, die dem RDBMS eigen sind (z. B. NOW()
in MySQL), sollten nicht in Anführungszeichen gesetzt werden, obwohl ihre Argumente denselben Zeichenfolgen- oder Bezeichner-Anführungsregeln unterliegen, die bereits erwähnt wurden.
Backtick (`)
Tabelle & Spalte ──────────────────────────────────────────────┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " INSERT IN` table` (`id`,` col1`, `col2`,` date`, `aktualisiert`)
VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
Nicht zitiertes Schlüsselwort ─────┴┴┴┘ │ │ │ │ │ │ │
Einfache Anführungszeichen (') ─────────────────────────┘ ┘┘││││││ │ │ │││││
Einfach zitiert (') DATUM ───────────────────────────────────────── │
Nicht zitierte Funktion ────────────────────────────────────────────
Variable Interpolation
Die Anführungszeichen für Variablen ändern sich nicht. Wenn Sie die Variablen jedoch direkt in einer Zeichenfolge interpolieren möchten, müssen sie in PHP in doppelte Anführungszeichen gesetzt werden. Stellen Sie einfach sicher, dass Sie die Variablen für die Verwendung in SQL ordnungsgemäß maskiert haben. ( Es wird empfohlen, stattdessen eine API zu verwenden, die vorbereitete Anweisungen unterstützt, um sich vor SQL-Injection zu schützen .)
// Gleiches gilt für einige Variablenersetzungen
// Hier wird ein Variablentabellenname $ table mit Backtick-Anführungszeichen und Variablen angegeben
// in der Liste VALUES stehen in einfachen Anführungszeichen
$ query = "INSERT IN` $ table` (`id`,` col1`, `col2`,` date`) VALUES (NULL, '$ val1' , '$ val2' , '$ date' ) ";
Vorbereitete Aussagen
Wenn Sie mit vorbereiteten Aussagen arbeiten, konsultieren Sie die Dokumentation, um festzustellen, ob die Platzhalter der Aussage in Anführungszeichen gesetzt werden müssen oder nicht. Die beliebtesten APIs in PHP, PDO und MySQLi erwarten nicht zitierte Platzhalter, ebenso wie die meisten vorbereiteten Anweisungs-APIs in anderen Sprachen:
// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";
// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";
Zeichen, bei denen ein Backtick in Bezeichnern angegeben werden muss:
Gemäß der MySQL-Dokumentation müssen Sie keine Bezeichner (Backtick) mit dem folgenden Zeichensatz in Anführungszeichen setzen:
ASCII: [0-9,a-z,A-Z$_]
(lateinische Grundbuchstaben, Ziffern 0-9, Dollar, Unterstrich)
Sie können Zeichen, die über diesen Satz hinausgehen, als Tabellen- oder Spaltenbezeichner verwenden, einschließlich Leerzeichen, aber dann müssen Sie sie in Anführungszeichen setzen (Backtick).
"tablename"
und einfache Anführungszeichen für Literale, z'this is a some text'
. Back-Ticks werden in Standard-SQL niemals verwendet. (Wenn Sie ein doppeltes Anführungszeichen in einen Bezeichner"odd""tablename"
'Conan O''Brien'