Det finns två stora problem här. Den första är mindre. Dessa kodrader kommer aldrig att fungera:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Detta beror på att de båda försöker anropa bindParam
som en sträng . Detta är omöjligt. bindParam
behöver en referens till en variabel. Det är därför du får felet "kan inte skicka parameter 2 genom referens":du kan bara skicka variabler genom referens.
Båda av dessa skulle dock fungera:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Det mer grundläggande problemet är dock din förståelse av förberedda uttalanden. Tanken med förberedda uttalanden är inte enkel byte av strängar till en annan sträng. Det handlar i grunden om att separera strukturen för frågan från data. Namnet på en tabell anses vara en del av strukturen för frågan, inte en del av data. Du måste ange tabellnamnet i den ursprungliga frågan. Din första kod är sättet att göra det.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');