在预准备语句中不起作用

时间:2013-07-21 20:52:16

标签: php mysql sql pdo

$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();

它会起作用。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您只能在参数化查询中绑定数据(列值),而不能绑定列名和表名。此外,在您的代码中,您尝试参数化连接初始化,我认为这是不正确的。

您也可以依赖于数据库名称的白名单:

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

然后检查

 if(in_array($_POST['db_name'], $databases) ){
   $dbname = $_POST['db_name'];
 }