【问题标题】:PHP/MYSQL - Drop database using prepared statementPHP/MYSQL - 使用准备好的语句删除数据库
【发布时间】:2017-01-02 17:14:16
【问题描述】:

我想使用 PDO 删除数据库。

这种方法对我来说是最好的方法

function delete_db($database)
{
  $statement = $my_pdo_obj->prepare("DROP DATABASE IF EXISTS :database");
  $statement->bindParam(":database", $database);
  $statement->execute();
}

但不幸的是,我收到一个 PDOException,说我的绑定值 ($database) 附近存在语法错误:

致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“?”附近使用的正确语法在第 1 行'

所以我尝试如下执行查询

function delete_db($database)
{
  $statement = $my_pdo_obj->exec("DROP DATABASE IF EXISTS " . $database);
}

而且它有效。

我想知道为什么准备好的语句不起作用,以及第二个查询是否安全。

提前感谢您的想法!

【问题讨论】:

    标签: php pdo drop-database


    【解决方案1】:

    您不能对表名、数据库名等使用绑定值。

    http://php.net/manual/ru/pdo.prepare.php#111977

    【讨论】:

    • 感谢您的回答!第二个呢,我应该保留它吗?
    • 如果您需要从您的应用程序中执行此操作,为什么不这样做。但不要忘记防止 SQL 注入
    【解决方案2】:

    据我所知,PDO 只接受列名的绑定。

    也许这个问题对你有帮助!

    Can PHP PDO Statements accept the table or column name as parameter?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      相关资源
      最近更新 更多