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_name,像这样:

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

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

4

1 回答 1

3

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

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

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

然后检查

 if(in_array($_POST['db_name'], $databases) ){
   $dbname = $_POST['db_name'];
 } 
于 2013-07-21T20:56:32.427 回答