Hier gibt es zwei große Probleme. Die erste ist gering. Diese Codezeilen werden niemals funktionieren:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Dies liegt daran, dass beide versuchen, bindParam
aufzurufen als String . Das ist unmöglich. bindParam
benötigt einen Verweis auf eine Variable. Aus diesem Grund erhalten Sie den Fehler "Parameter 2 kann nicht als Referenz übergeben werden":Sie können nur Variablen übergeben per Referenz.
Beides würde jedoch funktionieren:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Das grundlegendere Problem ist jedoch Ihr Verständnis von vorbereiteten Aussagen. Die Idee vorbereiteter Anweisungen ist nicht einfache Ersetzung von Zeichenfolgen in eine andere Zeichenfolge. Grundsätzlich geht es um die Trennung der Struktur der Abfrage von den Daten. Der Name einer Tabelle wird als Teil der Struktur der Abfrage betrachtet, nicht als Teil der Daten. Sie müssen den Tabellennamen in die ursprüngliche Abfrage einfügen. Ihr erster Code ist der Weg, es zu tun.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');