2012-02-26 90 views
1

我在使用php運行時遇到MySQL查詢問題。當我在PHPMyAdmin或SequelPro中運行它時,它工作正常,但是當它複製到它要運行的PHP文件中時,它停止工作。MySQL事務在PHPMyAdmin中運行時工作,但不能從PHP文件運行時運行

該查詢旨在從多個表中獲取與主鍵鏈接的數據,然後將該數據放入相應的相同表中。我知道這是一件奇怪的事情,但它需要做到這一點。

查詢(如在一個PHP文件中使用)如下:

for($x = 0; $x < count($REQIDARRAY); $x++){ 

$sql="BEGIN; 
INSERT INTO `Request` 
SELECT NULL AS `RequestID`, `ModCode`, `RoomID`, `Students`, `Priority`, `Day`,  `StartTime`, `Length`, `Semester`, `DateAdded`, `SpecialRequests` 
FROM RequestTEMP 
WHERE RequestTEMP.RequestID=\"".$REQIDARRAY[$x]."\"; 
INSERT INTO `Week` 
SELECT `WeekNumber` , LAST_INSERT_ID() AS `RequestID` 
FROM `WeekTEMP` 
WHERE WeekTEMP.RequestID=\"".$REQIDARRAY[$x]."\"'; 
INSERT INTO `RequestFacilities` 
SELECT LAST_INSERT_ID() AS `RequestID` , `FacilityID` 
FROM `RequestFacilitiesTEMP` 
WHERE RequestFacilitiesTEMP.RequestID=\"".$REQIDARRAY[$x]."\"'; 
DELETE FROM `RequestTEMP` WHERE RequestID=\"".$REQIDARRAY[$x]."\"; 
DELETE FROM `RequestFacilitiesTEMP` WHERE RequestID=\"".$REQIDARRAY[$x]."\"; 
DELETE FROM `WeekTEMP` WHERE RequestID=\"".$REQIDARRAY[$x]."\"; 
COMMIT;"; 

$DB->Query('TransferMe' , $sql); 
} 

我已經證實,$ REQIDARRAY [$ X]將返回正確的值。 當SequelPro運行它,所有的變化是

RequestID=\"".$REQIDARRAY[$x]."\" 


'RequestID='123' 

PHP中的錯誤消息是我會改變:
您在您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「INSERT INTO Request SELECT NULL作爲RequestIDModCodeRoomID,'學生」在列2
MySQL的版本是5.1.60正確的語法手冊。
我不知道是什麼導致了這個問題,我也嘗試了將RequestID硬編碼到PHP文件中,並且它仍然返回相同的錯誤。
任何幫助非常感謝!

+1

'$ DB'是什麼?你確定'$ DB-> Query()'可以處理多個查詢嗎? – Mchl 2012-02-26 18:55:58

+0

'$ DB'是'公共函數查詢($名稱,$ SQL){ \t \t \t // \t查詢數據庫並存儲查詢導致VARIABLE \t \t \t $ \t這 - >結果[$名] = mysql_query($ sql)或死(mysql_error()); \t \t}'。我沒有考慮過mysql_query是否可以接受多個查詢,我會看看 – user1149405 2012-02-26 19:00:27

回答

2

您使用的庫使用的是mysql_query()函數,該函數不能同時運行多個查詢(作爲防止SQL注入的保護)。

您需要單獨調用$DB->Query()來運行每個查詢。不用擔心,它仍然會被視爲單一交易。

例子:

$sql="BEGIN"; 
$DB->Query('TransferMe' , $sql); 
$sql = "INSERT INTO `Request` 
SELECT NULL AS `RequestID`, `ModCode`, `RoomID`, `Students`, `Priority`, `Day`,  `StartTime`, `Length`, `Semester`, `DateAdded`, `SpecialRequests` 
FROM RequestTEMP 
WHERE RequestTEMP.RequestID=\"".$REQIDARRAY[$x]."\";"; 
$DB->Query('TransferMe' , $sql); 
... 

另外:你可能想看看從PHP像ext/MySQLI訪問MySQL的一些更現代的方式或PDO(由大多數PHP程序員的收藏最多)(由MySQL的開發者推薦)

+0

感謝您的幫助。冒着聽起來有點愚蠢的風險,你能否通過給他們分別調用'$ DB-> Query()'來澄清你的意思?在每次插入後,我是否需要調用'$ DB-> Query()',但是仍然保存在'Begin; COMMIT;'? – user1149405 2012-02-26 19:14:15

+0

@ user1149405:查看示例的更新答案 – Mchl 2012-02-26 19:31:23

相關問題