我正在尝试删除具有动态名称的表。我实际上是动态地生成和操作表,但这是最简单的查询。
当我使用原始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上看到了类似目标的其他问题,但是他们都建议我写的第一个查询不能正常工作,而我已经使用它超过一年了。
谢谢,
答案 0 :(得分:1)
在构建SQL时,您应该将表名添加为值...
$pdo = DB::connection()->getPdo();
$this->ps_DeleteTempTable = $pdo->prepare(
"DROP TABLE `".$tableName."`"
);
当不使用后退标记时,您可能会得到一些奇怪的结果,因为名称可能是保留字。一般来说,设计数据库不使用这些数据库会更好,但有些很常见(例如'顺序')