簡體   English   中英

PDO創建臨時表並選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM