2012-11-11 21 views
3

我想使用DBI將值插入到兩個單獨的MySQL表中。我想兩個工作INSERT查詢通過插入;它們之間的結合成一個:爲什麼不用分號加入多個MySQL查詢並使用Perl DBI?

$dbh->do(q{ 
    INSERT INTO `testA`(test) values('testvalue111'); 
    INSERT INTO `testB`(test) values('testvalue222'); 
}); 

但我總是得到一個錯誤:如果我查詢分成兩個單獨的do電話

Syntactic error in "INSERT INTO `testB`(test) values('testvalue222 ..."

,它作品。但是,聯合查詢在phpMyAdmin中正常工作。爲什麼它在Perl中失敗?

回答

7

您需要在connect調用設置一個選項來啓用它。從the docs

mysql_multi_statements
As of MySQL 4.1, support for multiple statements seperated by a semicolon (;) may be enabled by using this option. Enabling this option may cause problems if server-side prepared statements are also enabled.

它默認是禁用的,而且應該儘量保持未設置狀態 - 這是SQL注入大量大道(你應該閱讀有關,特別是如果你不使用綁定)。

+0

這是更好,但是,使用單獨調用方便閱讀。 – titanofold

+0

爲了提高性能,結合通話使感謝! – Skip

-2

INSERT INTO testA(測試)值( 'testvalue111'),( 'testvalue222');

+0

來自參考:http://dev.mysql.com/doc/refman/5.5/en/insert.html – titanofold

+1

跳過插入到兩個不同的表中。 – Mat

0

默認情況下,DBD :: MySQL不會讓你同時執行多個語句。雖然你可以使這與mysql_multi_statements選項爲Mat showed,你不應該這樣做:除其他事項外,你的代碼會少便攜,因爲有些數據庫驅動程序沒有任何這樣的選擇,它可能會導致問題的準備聲明。

相反,只是發出每條語句單獨DBI命令。