2012-02-26 87 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

相关问题