Ci sono due grossi problemi qui. Il primo è minore. Queste righe di codice non funzioneranno mai:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Questo perché entrambi stanno tentando di chiamare bindParam
come stringa . Questo è impossibile. bindParam
ha bisogno di un riferimento a una variabile. Questo è il motivo per cui viene visualizzato un errore "impossibile passare il parametro 2 per riferimento":puoi passare solo variabili per riferimento.
Uno di questi, tuttavia, funzionerebbe:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Il problema più fondamentale, tuttavia, è la tua comprensione delle affermazioni preparate. L'idea delle dichiarazioni preparate è non semplice sostituzione di stringhe in un'altra stringa. Si tratta fondamentalmente della separazione della struttura della query dai dati. Il nome di una tabella è considerato parte della struttura della query, non dei dati. Devi inserire il nome della tabella nella query originale. Il tuo primo codice è il modo per farlo.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');