2012-02-26 5 views
1

PHPで実行するとMySQLクエリに問題があります。 PHPMyAdminまたはSequelProで実行するとうまく動作しますが、PHPファイルにコピーすると実行されるため、動作しなくなります。PHPMyAdminで実行したときにMySQLトランザクションが動作しますが、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でそれを実行し、その変更を全てPHPで私が変わってしまうということです

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

'RequestID='123' 


にエラーメッセージがある:
あなたのSQL構文でエラーが発生しています。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が 'INSERT INTO Request SELECT NULL AS RequestID,、 RoomID、学生2行目の' Student 'の近くで使用されていることを確認してください。
MySQLバージョンは5.1.60です。
私はこの問題を引き起こしているかどうかわからない、私はまた、PHPファイルにRequestIDの値をハードコーディングしようとしたが、それでも同じエラーを返します。
ご迷惑をおかけして申し訳ありません。

+1

'$ DB'とは何ですか? '$ DB-> Query()'は複数のクエリを扱うことができますか? – Mchl

+0

は '$ DB'は'パブリック関数のクエリ($名、$ sqlを){//変数にデータベースとSTOREクエリ結果を照会 \t \t \t \tます$ this->結果[$名 \t \t \t \t ] = mysql_query($ sql)またはdie(mysql_error()); \t \t} '。私はmysql_queryが複数のクエリを受け入れることができるかどうかは考えていませんでしたが、私は一見を持っています – user1149405

答えて

2

使用しているライブラリは、mysql_query()関数を使用しています。これは、SQLインジェクションに対する保護として複数のクエリを同時に実行できません。

$DB->Query()を別に呼び出して各クエリを実行する必要があります。心配しないでください。それは引き続き1つのトランザクションとして扱われます。

例:また

$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コーダの過半数でお気に入り化(favourited))ext/MySQLI(のMySQLの開発者によって推奨)またはPDOのようなPHPからMySQLをアクセスするためのいくつかのより近代的な方法で見たいと思うかもしれません

+0

あなたの助けに感謝します。ちょっとばかげているかもしれませんが、 '$ DB-> Query()'を別々に呼び出すことで、どういう意味なのかを私に明かすことができますか?挿入するたびに '$ DB-> Query()'を呼び出す必要がありますが、 'Begin;コミット; '? – user1149405

+0

@ user1149405:例の更新された回答を参照 – Mchl

関連する問題