Hay dos grandes problemas aquí. El primero es menor. Estas líneas de código nunca funcionarán:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Esto se debe a que ambos intentan llamar a bindParam
como una cadena . Esto es imposible. bindParam
necesita una referencia a una variable. Esta es la razón por la que obtiene el error "no se puede pasar el parámetro 2 por referencia":solo puede pasar variables por referencia.
Cualquiera de estos, sin embargo, funcionaría:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
El problema más fundamental, sin embargo, es su comprensión de las declaraciones preparadas. La idea de declaraciones preparadas es no simple sustitución de cadenas en otra cadena. Se trata fundamentalmente de la separación de la estructura de la consulta de los datos. El nombre de una tabla se considera parte de la estructura de la consulta, no parte de los datos. Debe poner el nombre de la tabla en la consulta original. Tu primer código es la forma de hacerlo.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');