php - MySQL 事务在 PHPMyAdmin 中运行时有效,但在从 PHP 文件运行时无效

标签 php mysql transactions

我在 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 附近使用的正确语法。选择 NULL 作为 RequestID , ModCode , RoomID ,第 2 行的“学生”。
MySQL版本为5.1.60。
我不知道是什么导致了这个问题,我也尝试过将 RequestID 的值硬编码到 PHP 文件中,但它仍然返回相同的错误。
非常感谢任何帮助!

最佳答案

您使用的库正在使用 mysql_query() 函数,该函数不能一次运行多个查询(作为对 SQL 注入(inject)的保护)。

您需要通过单独调用 $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 程序员的最爱)

关于php - MySQL 事务在 PHPMyAdmin 中运行时有效,但在从 PHP 文件运行时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9456073/

相关文章:

php - 将元素添加到具有间隙数字键的数组以形成索引数组/列表

php - 是否有任何插件可以将缩略图等图像扩展到一些大尺寸?

java - 错误: Data too long for column 'imagen' at row 1 with column 'MEDIUMBLOB' in MySQL

PHP sql 查询按名称排序并在末尾排序名为 "x"的类别

ruby-on-rails - ActiveRecord 事务没有回滚整个事务

sql - 如何阅读 Postgres 事务日志

php - Laravel 查询生成器 - sum() 方法问题

php - 关于类别名的文档中是否存在错误?

mysql - 如何使用更新将数据库中的值增加+1

android - 调用 add() 方法时 fragment 不显示