2012-11-21 61 views
0

首先,我是web開發新手,所以對不起,如果它是一個愚蠢的問題,我有一個數組,這個數組的鍵是需要更新的記錄的id在數據庫中,我使用下面的代碼創建查詢並使用mysql事務來運行查詢(因爲少數記錄應該一起更新)。生成的查詢工作正常,當我運行它使用命令行,但與PHP代碼NO!PHP + MySQL事務+語法錯誤

生成查詢代碼:

$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連接和...因爲我認爲很高的百分比他們很好,但如果必要我可以包括他們。

在此先感謝

+8

舊的'mysql _ *()'API和較舊的驅動程序在單個查詢中不支持多個語句。相反,你必須執行'mysql_query(「START TRANSACTION」);的mysql_query( 「插入......」); mysql_query(「COMMIT」);'作爲單獨的查詢。 –

+0

您打算執行查詢的函數是什麼? –

+1

*警告*您的代碼可能容易受到SQL注入攻擊 –

回答

1

提到您可能需要切換到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; 
} 
2

Multiple queries使用MySQL的功能不被支持。您將需要細分的事務:

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

但是,您可以使用mysqli_mutli_query或作爲另一個答案PDO