Il y a deux gros problèmes ici. Le premier est mineur. Ces lignes de code ne fonctionneront jamais :
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
C'est parce qu'ils tentent tous les deux d'appeler bindParam
sous forme de chaîne . C'est impossible. bindParam
a besoin d'une référence à une variable. C'est pourquoi vous obtenez une erreur "impossible de passer le paramètre 2 par référence" :vous ne pouvez passer que des variables par référence.
Cependant, l'un ou l'autre de ceux-ci fonctionnerait :
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Le problème le plus fondamental, cependant, est votre compréhension des déclarations préparées. L'idée des déclarations préparées n'est pas simple substitution de chaînes dans une autre chaîne. Il s'agit fondamentalement de séparer la structure de la requête des données. Le nom d'une table est considéré comme faisant partie de la structure de la requête, et non comme faisant partie des données. Vous devez mettre le nom de la table dans la requête d'origine. Votre premier code est la façon de le faire.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');