PHP
1$dsn = "sqlite:../sql/base.sqlite"; 2$pdo = new PDO($dsn); 3 4$stmt = $pdo -> prepare("DROP TABLE '削除テーブル'"); 5$stmt->execute();
上記ソースですと「削除テーブル」の削除に成功します
PHP
1$dsn = "sqlite:../sql/base.sqlite"; 2$pdo = new PDO($dsn); 3 4$st = $pdo->query("SELECT * FROM task WHERE num='1'"); 5$data = $st->fetch(); 6$del_table = $data["del_table"]; 7 8$stmt = $pdo -> prepare("DROP TABLE '{$del_table}'"); 9$stmt->execute();
SELECTをしてからテーブル削除をすると何故か削除が行われません
何か書き方に問題があるのでしょうか?
そもそも正しく想定の情報をSELECTできてますか?
また、try-catchでPDOException拾うように組んでご確認ください。
SELECT後にSELECTした文を使わず
$stmt = $pdo -> prepare("DROP TABLE '削除テーブル'");
としても動作しないので正しく想定の情報はSELECTできた環境で試せています
try-catchいまから試します
try-catch試してみたところ
catchを通らずエラーなく終了するのですがテーブルが削除されません
try内でもSELECTしないと削除されました
シングルクォーテーションで文字列を囲むとリテラルとして扱われるのですが、意味が分かっていてシングルクォーテーションにしているのでしょうか?
それとも'削除テーブル'などと本当のテーブル名のように見えないので、その部分は実際に使うテーブル名に置き換えている、という事でしょうか?
try-catch導入したコードを提示してください
string(58) "SQLSTATE[HY000]: General error: 6 database table is locked"
上記エラーが出ておりました
saziさんの回答「closeCursor」をすることで解決できました、ありがとうございます
ちなみにテーブル名がランダムでテーブル名先頭に数字が来てしまう場合があったためシングルコーテーションで囲っておりました
(先頭に数字来ないように修正すればいいのですが…)
回答3件
あなたの回答
tips
プレビュー