создать базу данных с pdo в php

Когда я создаю базу данных без использования параметра bind, он работает отлично.

$login = 'root'; $password = 'root'; $dsn = "mysql:host=localhost"; $opt = array( // any occurring errors wil be thrown as PDOException PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // an SQL command to execute when connecting PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'" ); // Making a new PDO conenction. $conn = new PDO($dsn, $login, $password,$opt); $db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account'); $db->execute(); // End Connection and Return to other files. 

Но после применения bindParam он работает неправильно.

 $db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS ?'); $db->bindParam(1,`account`); $db->execute(); //line 18 

Показ ошибки:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1' in /Applications/MAMP/htdocs/create/index.php:18 Stack trace: #0 /Applications/MAMP/htdocs/create/index.php(18): PDOStatement->execute() #1 {main} thrown in /Applications/MAMP/htdocs/create/index.php on line 18

ОБНОВИТЬ:

 <?php $login = 'root'; // Login username of server host. $password = 'root'; // Password of server host. $dsn = "mysql:host=localhost"; // Set up a DSN for connection with Database Frat. $dbb = 'sale'; $opt = array( // any occurring errors wil be thrown as PDOException PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // an SQL command to execute when connecting PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'" ); // Making a new PDO conenction. $conn = new PDO($dsn, $login, $password,$opt); $db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS ?'); $db->bindParam(1,'$dbb'); //line 17 $db->execute(); ?> 

он показывает ошибку: не может передать параметр 2 по ссылке в строке 17

Здесь есть две большие проблемы. Первый – незначительный. Эти строки кода никогда не будут работать:

 $db->bindParam(1,`account`); $db->bindParam(1,'$dbb'); //line 17 

Это связано с тем, что оба они пытаются вызвать bindParam как строку . Это невозможно. bindParam нуждается в ссылке на переменную. Вот почему вы получаете сообщение «can not pass parameter 2 by reference»: вы можете передавать только переменные по ссылке.

Однако любой из них будет работать:

 $db->bindParam(1, $dbb); // call bindParam on a variable $db->bindValue(1, 'account'); // call bindValue on a string literal 

Однако более фундаментальная проблема заключается в том, что вы понимаете подготовленные заявления. Идея подготовленных операторов – не простая подстановка строк в другую строку. Это принципиально об отделении структуры запроса от данных. Имя таблицы считается частью структуры запроса, а не частью данных. Вы должны поместить имя таблицы в исходный запрос. Ваш первый код – это способ сделать это.

 $db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');