2017-06-07 6 views
1

動的名を持つテーブルを削除しようとしています。私は実際にテーブルを動的に生成して操作しますが、これは最も簡単なクエリです。Laravel - 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`" 
     ); 

私は次のエラーが表示されます

私はそうのように、生のPDOを使用する場合

すべてが正常に動作します

SQLSTATE [42S02]:ベース表またはビューが見つかりません:1146 'testdb。' 私はSO同様の目的を持つ上の他の質問を見てきましたが、私は一年以上のためにそれを使用しているのに対し、それらはすべて、私は仕事することはできません書いた最初のクエリを示唆して

存在しません。 SQLを構築するとき

おかげで、

+1

実際に機能していれば、プレースホルダは値だけを操作する必要があるため、列や表名ではありません – Qirel

+0

バックティックを使って作業していますが、問題なしで作成/挿入/更新/削除できます。ララヴェルを通過するときに作業が停止するのは単なる奇妙なことです。 – mils

+0

これは実際にはうまくいけば非常に不思議です...準備するときに、単一引用符が自動的に値の周りに追加されるので、 'DROP TABLE \' testdb.'table '\ ''のようなクエリを*得なければなりません。無効。実行しているPHPとMySQLのバージョンバインドの実行方法も表示できますか? – Qirel

答えて

1

あなたが値としてテーブル名を追加する必要があります...

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

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

名は予約することができるよう背中使用しないとダニときには、いくつかの奇妙な結果を得ることができます言葉。一般的に、これらを使用しないようにデータベースを設計する方が良いですが、いくつかはかなり一般的です(たとえば「順序」など)

関連する問題