2013-07-21 1 views
0
$dbh = new PDO('mysql:host=' . $_POST['db_host'], $_POST['db_user'], $_POST['db_user_password']); 
$sql = 'CREATE DATABASE :db_name'; 
$sth = $dbh->prepare($sql); 
$sth->bindParam(':db_name', $_POST['db_name']); 
var_dump($sth->execute()); 

Это всегда показывает ложь. Но если прямо указать имя db_имя:Не работает маркер в заранее поставленных пометках

$sql = 'CREATE DATABASE database'; 
$sth = $dbh->prepare($sql); 
$sth->execute(); 

Будет работать. Что я делаю неправильно?

+3

Вы можете только связать значения, а не идентификаторы. – mario

+0

Мне нравится ответ на этот вопрос: http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement –

ответ

3

Вы можете привязывать данные (значения столбцов) только к параметризованному запросу, а не к имени столбца и имени таблицы. Кроме того, в вашем коде вы пытались параметризовать инициализацию соединения, которая, я думаю, не верна.

в качестве альтернативы Вы можете положиться на белый список БД имен:

$databases = array('dbone', 'dbtwo'); 

затем проверить

if(in_array($_POST['db_name'], $databases)){ 
    $dbname = $_POST['db_name']; 
} 
Смежные вопросы