2014-10-20 145 views
1

我編寫了一些代碼,這些代碼構建了在頁面加載結束時執行的多個插入和更新語句的單個查詢。它曾經工作正常。我我的開發系統上寫類似的,優化的代碼(Ubuntu的14.04,PHP 5.5.3 Ubuntu的),但我不再能夠在一個PDO查詢運行多個語句:PDO - 在一個查詢中執行多次插入/更新

我做什麼

在一個頁面渲染,我建立這看起來有點SQL語句,如:

insert into <table> (col1,col2,col3) VALUES (?,?,?); 
update <table> set col1 = ?, col4 = ? where id = ?; 
insert into <table> (col1,col2,col3) VALUES (?,?,?); 
... 

當頁面已經被渲染,我敢肯定沒有問題,我執行使用的包裝查詢PDO。包裝功能的重要位

$database = new PDO("mysql:host=<host>;dbname=<dbname>", <user>, <pwd>, 
       array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names 'utf8'")); 
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $database->prepare($sql); 
$stmt->execute($params); 

出於某種原因,我不再能一重擊,以執行該語句,相反,只有PDO儘管$stmt->queryString仍持有整個查詢執行的第一個查詢。任何人都可以幫助我解決這個問題。

+0

是什麼給? 'try {$ stmt = $ database-> prepare($ sql); $ stmt->執行($ PARAMS); } catch(PDOException $ objException){echo print_r($ objException,true);} }'另請參閱:http://stackoverflow.com/a/6461110/3000179 – 2014-10-20 14:08:45

+0

@ʰᵈˑ不會引發異常。它只運行第一個語句,在我的例子中,它是'insert in ...' – 2014-10-20 14:11:46

+2

*「我建立了一個看上去有點像這樣的SQL語句:」* - 爲什麼不告訴我們你實際使用的是什麼。這是猜測,充其量。 – 2014-10-20 14:12:42

回答

-1

發現問題: 如果其中一個查詢引發異常,PDO將自動失敗。在我的情況下,第一個查詢是可以的,但第二個查詢引發了完整性約束失敗錯誤,所以看起來好像只有第一個查詢正在運行。

聰明的人剛剛告訴我:不要遷怒於信使,打破了查詢

+2

使用事務處理多個查詢。 – tyteen4a03 2014-10-20 14:50:06

+0

@ tyteen4a03可怕的是我。 PDO完全無聲無息 – 2014-10-20 14:51:32

+0

您最初使用它的方式並非如何使用它(如其他人所述)。 – tyteen4a03 2014-10-20 14:55:03