php - 在准备好的语句中不工作标记

标签 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();

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

最佳答案

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

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

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

然后检查

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

关于php - 在准备好的语句中不工作标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776788/

相关文章:

javascript - 当您返回浏览器时如何避免重新计算值(value)?

javascript - 通过ajax将js值发送​​到php Controller

python - 只是无法让 MySQL 与 Python/Django 一起工作

mysql - 如何使用 Rails 2.1 和 MySQL 定义 BigInt 主键?

mysql - #1130 - 不允许主机 ‘localhost’ 连接到此 MySQL 服务器

sql - 我如何在 SQL 中聚合它

sql - 插入时使用 PostgreSQL 外部数据包装器,批量插入行是否更高效?

php - REST 网络服务 : Symfony 2 vs silex

mysql - 在预期条件的上下文中指定的非 bool 类型的表达式,

php - 如何在wordpress中使用css和php