Jsou zde dva velké problémy. První je vedlejší. Tyto řádky kódu nikdy nebudou fungovat:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Je to proto, že se oba pokoušejí volat bindParam
jako řetězec . To je nemožné. bindParam
potřebuje odkaz na proměnnou. To je důvod, proč se zobrazí chyba „nelze předat parametr 2 odkazem“:můžete předat pouze proměnné odkazem.
Obojí z těchto by však fungovalo:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Zásadnějším problémem je však vaše porozumění připraveným prohlášením. Myšlenka připravených prohlášení není jednoduchá záměna řetězců za jiný řetězec. Jde zásadně o oddělení struktury dotazu od dat. Název tabulky je považován za součást struktury dotazu, nikoli za součást dat. Název tabulky musíte vložit do původního dotazu. Váš první kód je způsob, jak to udělat.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');