Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;MySQL事务+;语法错误_Php_Mysql - Fatal编程技术网

PHP+;MySQL事务+;语法错误

PHP+;MySQL事务+;语法错误,php,mysql,Php,Mysql,首先,我是web开发新手,非常抱歉,如果这是一个愚蠢的问题,我有一个数组,数组的键是数据库中需要更新的记录的id,我附带了下面的代码来创建查询,并使用mysql事务来运行查询(因为应该一起更新的记录很少)。当我使用命令行运行生成的查询时,它运行得很好,但是使用php代码时,没有 生成查询的代码: $insert=""; if($run==true){ foreach($result as $key=>$x){ $insert = $insert ."update proje

首先,我是web开发新手,非常抱歉,如果这是一个愚蠢的问题,我有一个数组,数组的键是数据库中需要更新的记录的id,我附带了下面的代码来创建查询,并使用mysql事务来运行查询(因为应该一起更新的记录很少)。当我使用命令行运行生成的查询时,它运行得很好,但是使用php代码时,没有

生成查询的代码:

$insert="";

if($run==true){

foreach($result as $key=>$x){


    $insert = $insert ."update project set type='".$x."' "."where "."id=".$key.";";


    }

//echo $insert;
$insert=$insert ."COMMIT;";
$insert= "START TRANSACTION;". $insert;
代码的结果是:

START TRANSACTION;update project set type='project1' where id=1;update project set type='project2' where id=2;COMMIT;
它给我的错误是:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update project set type='project1' where id=1;update project set type='project2'' at line 1
我没有包括sql连接和。。。因为我相信高百分比是可以的,但如果有必要,我也可以把它们包括在内

提前感谢

不支持使用MySQL函数。您需要对事务进行细分:

$sql1 = UPDATE `project` SET `type`='project1' WHERE `id`=1;
$sql2 = UPDATE `project` SET `type`='project2' WHERE `id`=2;
但是,您可以使用另一个答案中提到的或

使用MySQL函数不受支持。您需要对事务进行细分:

$sql1 = UPDATE `project` SET `type`='project1' WHERE `id`=1;
$sql2 = UPDATE `project` SET `type`='project2' WHERE `id`=2;

但是,您可以使用或如另一个答案中所述,您可能希望切换到PDO,该PDO具有直接到事务的接口

$db = new PDO($dsn, $user, $pass);

$stmt = $db->prepare("update project set type= ? where id= ?");
$db->beginTransaction();

try {
  foreach ($result as $key => $x) {
    $db->execute(array($x, $key));
  }

  $db->commit();
} catch (PDOException $e) {
  $db->rollBack();
  throw $e;
}

您可能希望切换到PDO,它有一个直接到事务的接口

$db = new PDO($dsn, $user, $pass);

$stmt = $db->prepare("update project set type= ? where id= ?");
$db->beginTransaction();

try {
  foreach ($result as $key => $x) {
    $db->execute(array($x, $key));
  }

  $db->commit();
} catch (PDOException $e) {
  $db->rollBack();
  throw $e;
}

较旧的
mysql_*()
API和较旧的驱动程序\n不支持在一个查询中使用多个语句。相反,您必须执行
mysql_查询(“启动事务”);mysql_查询(“插入…”);mysql_查询(“提交”)作为单独的查询。您调用什么函数来执行查询?警告您的代码可能容易受到sql注入攻击@Daniel A。怀特:谢谢提醒,是的,我相信是的,这只是目前的一个测试代码,稍后我将修复该问题。@G-Nugget:好的,我有一个类负责连接,下面是我如何使用它的:$database_connection=newdatabase_connection(“…”、“…”、“…”)$数据库连接->设置表名称(“…”)$数据库连接->设置查询($insert);//$insert是上述代码的结果(查询)$database_connection->connect();较旧的
mysql_*()
API和较旧的驱动程序\n不支持在一个查询中使用多个语句。相反,您必须执行
mysql_查询(“启动事务”);mysql_查询(“插入…”);mysql_查询(“提交”)作为单独的查询。您调用什么函数来执行查询?警告您的代码可能容易受到sql注入攻击@Daniel A。怀特:谢谢提醒,是的,我相信是的,这只是目前的一个测试代码,稍后我将修复该问题。@G-Nugget:好的,我有一个类负责连接,下面是我如何使用它的:$database_connection=newdatabase_connection(“…”、“…”、“…”)$数据库连接->设置表名称(“…”)$数据库连接->设置查询($insert);//$insert是上述代码的结果(查询)$database_connection->connect();