在php中运行时遇到MySQL查询问题。当我在PHPMyAdmin或SequelPro中运行它时它工作正常,但是当复制到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 AS RequestID
,ModCode
,RoomID
,`Student'附近使用正确的语法第2行。
MySQL版本是5.1.60
我不知道是什么导致了这个问题,我也尝试将RequestID的值编码硬编码到PHP文件中,它仍然会返回相同的错误。
任何帮助非常感谢!
答案 0 :(得分: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访问MySQL的方法,如ext/MySQLI(由MySQL开发人员推荐)或PDO(受大多数PHP编码员青睐)