[英]PDO Create Temp Table and Select
我試圖從多個表的結果創建一個臨時表(相同的表結構)。 在創建臨時表並運行后續查詢之后,我想將臨時表中的結果存儲在一個數組中,以便稍后在腳本/程序中訪問。 我試圖尋找答案,但似乎找不到答案。
我已經嘗試過nextRowset()以及分離查詢,但似乎沒有任何工作像我期望的那樣工作。
這是我的代碼:
$pdo = new PDO("mysql:host=".$_SESSION['server'].";dbname=data".$_SESSION['sysident'],$user,$pass);
$stmt = $pdo->prepare("DROP TABLE IF EXISTS $tabletocreate;
CREATE TEMPORARY TABLE $tabletocreate LIKE table1;
INSERT INTO $tabletocreate (SELECT * FROM table1 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table2 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table3 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) ORDER BY SLIPNO;
SELECT * FROM $tabletocreate");
$stmt->bindParam(":memno",$_SESSION['memno']);
$stmt->execute();
$stmt->nextRowset();
$test = $stmt->fetchAll();
print_r($test);
我不確定為什么結果沒有存儲到數組中。 據我所知,一切似乎都正確,並且在運行腳本時不會發生錯誤。 我感謝任何人都可以提供的任何幫助。
更新 - 我發現了查詢無效的原因。 我在我試圖創建的表名中使用了“ - ”,這是不允許的。
您不能在單個->query()
調用中運行多個查詢。 這是底層PHP mysql驅動程序中的一個安全措施,用於防止某種形式的SQL注入攻擊。 與您使用的DB接口庫無關,因為它們都使用相同的底層驅動程序。 您必須單獨運行每個單獨的查詢:
->query("DROP TABLE IF EXISTS ...");
->query("CREATE TEMPORARY TABLE ...");
->query("INSERT INTO ...");
etc...
我試圖在表名中創建一個帶有“ - ”的表名。 從表名中刪除它后,所有查詢都成功執行,我的PHP代碼按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.