Laravel - PDO - 动态表名

时间:2017-06-07 10:25:36

标签: php mysql laravel pdo

我正在尝试删除具有动态名称的表。我实际上是动态地生成和操作表,但这是最简单的查询。

当我使用原始PDO时,一切正常:

// PURE PDO VERSION
$this->db = new PDO(
    'mysql:host='   . $configParams['db_hostname']
    . ';port='      . $configParams['db_port']
    . ';dbname='    . $configParams['db_name']
    . ';charset=utf8mb4',
    $configParams['db_username'],
    $configParams['db_password']
);

$this->ps_DeleteTempTable = $db->prepare(
            "DROP TABLE `:tableName`"
        );

但是当我使用Laravel时也是如此:

// LARAVEL VERSION
$pdo = DB::connection()->getPdo();

$this->ps_DeleteTempTable = $pdo->prepare(
            "DROP TABLE `:tableName`"
        );

我收到以下错误:

  

SQLSTATE [42S02]:未找到基表或视图:1146表' testdb。?'   不存在

我已经在SO上看到了类似目标的其他问题,但是他们都建议我写的第一个查询不能正常工作,而我已经使用它超过一年了。

谢谢,

1 个答案:

答案 0 :(得分:1)

在构建SQL时,您应该将表名添加为值...

$pdo = DB::connection()->getPdo();

$this->ps_DeleteTempTable = $pdo->prepare(
            "DROP TABLE `".$tableName."`"
        );

当不使用后退标记时,您可能会得到一些奇怪的结果,因为名称可能是保留字。一般来说,设计数据库不使用这些数据库会更好,但有些很常见(例如'顺序')