Транзакция MySQL работает при запуске в PHPMyAdmin, но не при запуске из файла PHP - PullRequest
1 голос
/ 26 февраля 2012

У меня проблема с запросом MySQL при запуске в php. Он отлично работает, когда я запускаю его в 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, и он все еще возвращает ту же ошибку.
Любая помощь высоко ценится!

1 Ответ

2 голосов
/ 26 февраля 2012

Используемая вами библиотека использует функцию 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);
...

Также: возможно, вы захотите взглянуть на некоторые более современные способы доступа к MySQL из PHP, такие как ext / MySQLI (рекомендуется разработчиками MySQL) или PDO (предпочитаемые большинством PHP кодеры)

...