$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 name,就像这样:
$sql = 'CREATE DATABASE database';
$sth = $dbh->prepare($sql);
$sth->execute();
它会起作用。我做错了什么?
答案 0 :(得分:3)
您只能在参数化查询中绑定数据(列值),而不能绑定列名和表名。此外,在您的代码中,您尝试参数化连接初始化,我认为这是不正确的。
您也可以依赖于数据库名称的白名单:
$databases = array('dbone', 'dbtwo');
然后检查
if(in_array($_POST['db_name'], $databases) ){
$dbname = $_POST['db_name'];
}