DBD︰ :mysql - Perl5 數據庫界面的MySQL 驅動器 名字 提要 例子 描述 種類方法 私人MetaData 方法 伺服器管理 數據庫處理 陳述操作 交易支援 多個結果下落 有多個結果的問題下落 MULTITHREADING 非同步的質問 安裝 環境變量 用CPAN安裝 手工安裝 WIN32 安裝 作者 貢獻 版權 郵寄名單支援 附加DBI 訊息 缺陷報告,提升/特徵請求 -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 名字 DBD︰ :mysql - Perl5 數據庫界面(DBI)的MySQL 驅動器 -------------------------------------------------------------------------------- 提要 使用DBI; 美元dsn = "DBI︰mysql︰數據庫= 美元數據庫; 主人= 美元hostname; = 美元港口港口" ; 美元dbh = DBI>連結(美元dsn,美元用戶,美元密碼) ; 美元drh = DBI>安裝 _ 司機(" mysql" ); @數據庫 = DBI>數據 _ 來源(" mysql" ); 或者 @數據庫 = DBI>數據 _ 來源(" mysql" , {"主人" =>美元主人," 港口" =>美元港口," 用戶" =>美元用戶,密碼=>美元透過 }); 美元sth = 美元dbh>準備(" 選擇 * 從那裡foo在那裡bla" ); 或者 美元sth = 美元dbh>準備(" LISTFIELDS 美元桌子" ); 或者 美元sth = 美元dbh>準備(" LISTINDEX 美元桌子美元指數" ); 美元sth>執行; 美元numRows = 美元sth>排; 美元numFields = 美元sth> {' NUM _ _ 領域' }; 美元sth>完成; 美元rc = 美元drh>func(' createdb ',美元數據庫,美元主機,美元用戶,美元密碼,' 管理') ; 美元rc = 美元drh>func(' dropdb ',美元數據庫,美元主機,美元用戶,美元密碼,' 管理') ; 美元rc = 美元drh>func(' 關閉',美元主人,美元用戶,美元密碼,' 管理') ; 美元rc = 美元drh>func(' 再裝填',美元主人,美元用戶,美元密碼,' 管理') ; 美元rc = 美元dbh>func(' createdb ',美元數據庫,' 管理') ; 美元rc = 美元dbh>func(' dropdb ',美元數據庫,' 管理') ; 美元rc = 美元dbh>func(' 關閉',' 管理') ; 美元rc = 美元dbh>func(' 再裝填',' 管理') ; -------------------------------------------------------------------------------- 例子 # ! /usr /箱子/ perl 使用嚴格; 使用DBI() ; #連接數據庫。 我的美元dbh = DBI>連結(" DBI︰mysql︰數據庫=測試; 主人= localhost" , "joe" ,"joe的密碼" , {'aiseError ' =>1 }); #放下桌子' foo '。 如果' foo '不存在,這可能失敗。 如此的#我們把eval 放在它周遭。 eval {美元dbh>做(" 扔桌子foo" ) }; 列印" 下降foo 失敗︰ 美元@ \ n" 如果美元@; # 建立一張新桌子' foo '。 這不可失敗,因此我們不 # 抓住錯誤。 美元dbh>做(" 建立(Id 整數,名字VARCHAR的桌子foo ( 20 ) )"); #把一些數據插入' foo '中。 我們使用美元dbh>引用() 因為 #引用名字。 美元dbh>做(" 插入進foo 估價(1," . 美元dbh>引用(" 蒂姆" ) . ")"); # 相同的東西,但是使用位置標識符 美元dbh>做(" 插入進foo 估價(? ,? )",undef,2," Jochen" ); #現下挽回來自表格的數據。 我的美元sth = 美元dbh>準備(" 選擇 * 從foo" ); 美元sth>執行() ; 當(我的美元裁判員= 美元sth>fetchrow時 _ hashref() ) { 列印" 找到一排︰ Id = 美元裁判員> {' Id ' },名字 = 美元裁判員> {'名字' }\n" ; } 美元sth>完成() ; #從數據庫那裡拆開。 美元dbh>拆開() ; -------------------------------------------------------------------------------- 描述 DBD︰ :mysql是MySQL 數據庫的Perl5 數據庫界面驅動器。 換句話說︰ DBD︰ :mysql是在Perl編程語言和帶著MySQL相關的數據庫管理體制來的MySQL編程API之間的一個界面。 大多數功能由這編程提供API被支援。 一些很少使用的功能丟失,主要是因為noone 請求他們。 : -) 遵循我們第一個什麼討論DBD的使用︰ :mysql,因為這是你最將需要的。 欲了解安裝,參見關於安裝的部分和下面的WIN32 安裝。 看見一個上面的簡單的例子的例子。 從perl中你用陳述開動界面 使用DBI; 在那之後你能連接多台MySQL 數據庫伺服器並且透過一個簡單的面向對象的界面寄給他們中任何人多個質問。 兩類物體是可提供的︰ 數據庫處理,陳述處理。 Perl返回數據庫處理對連結方法如此喜歡︰ 美元dbh = DBI>連結(" DBI︰mysql︰數據庫= 美元分貝; 主人= 美元主人" , 美元用戶,美元密碼, {RaiseError =>1 }); 你連接一數據庫,罐頭執行SQL語句有你︰ 我的美元質問 = sprintf(" 插入進foo 估價(百分之d,百分之s) ", 美元號碼,美元dbh>引用(" 名字" )); 美元dbh>做(美元質問) ; 見DBI ( 3 ) 因為關於引語詳述,做方法。 一種可選擇的方法是 美元dbh>做(" 插入進foo 估價(? ,? )",undef, 美元號碼,美元名字) ; 無論在哪種情況下這種引語方法被自動執行。 也看見討厭的事情 _ 在DBI裡的param 方法 ( 3 ) . 看數據庫在數據庫上適合更多的細節經營下面柄。 如果你想,挽回結果,你需要建立一個所謂陳述操作用︰ 美元sth = 美元dbh>準備(" 選擇 * 從美元列入議程" ); 美元sth>執行() ; 這個陳述操作可以用於多件東西。 首先你罐裝retreive一排數據︰ 我的美元排 = 美元sth>fetchrow _ hashref() ; 如果你的桌子有縱行ID 和名字, 然後,美元排將是有主要ID 和名字的切碎的食物裁判員。 看陳述適合由陳述柄開出的更多的細節經營下面。 但是現下為一條更多的正規方針︰ 種類方法 溝通 使用DBI; 美元dsn = "DBI︰mysql︰美元數據庫" ; 美元dsn = "DBI︰mysql︰數據庫= 美元數據庫; 主人= 美元hostname" ; 美元dsn = "DBI︰mysql︰數據庫= 美元數據庫; 主人= 美元hostname; = 美元港口港口" ; 美元dbh = DBI>連結(美元dsn,美元用戶,美元密碼) ; 數據庫必須總被指定。 主人 港口 hostname, 如果不指定或者作為"或者' localhost '確切說明, 將到在把預設用於Unix 插座的本地機器上運轉的一台MySQL伺服器不履行。 為了透過TCP連接本地機器上的一台MySQL伺服器,你必須指定loopback IP 位址(127.0.0.1) 作為主人。 MySQL伺服器正在非標準港口數目上運轉, 你可能明確地說明要在hostname 辯論裡連接的港口數目, 以串聯那些hostname 和港口號碼一同以冒號分開(︰) 或者透過使用港口辯論的性格。 為了關於使用傳輸控制協議/網際協議的localhost連接一台MySQL伺服器,你必須指定hostname為127.0.0.1(用任意港) . mysql _ 客戶 _ 發現 _ 排 使成為可能(真值) 或者使無能力(錯誤的價值) 旗客戶 _ 發現 _ 排,當連接MySQL伺服器時。 這有一種有點有趣的效應︰ 沒有mysql _ 客戶 _ 發現 _ 排,如果你作秀,一個質問喜歡 不斷改進美元桌子確定Id = 1在那裡Id = 1 然後MySQL 發動機永遠返回0,因為沒有排改變。 由於mysql _ 客戶 _ 發現 _ 排但是,它將返回有一Id 1,正如一些人正期望的的的數量排。 (至少為兼容性到其他發動機.) mysql _ 壓縮 自MySQL 3.22.3起,一個新特徵被支援︰ 如果你的DSN 包含選擇" mysql _ 壓縮= 1" , 然後在客戶和伺服器之間的聯繫將被壓縮。 mysql _ 溝通 _ 瀏覽程式 如果你的DSN 包含選擇" mysql _ 溝通 _ 瀏覽程式= # #" ,連結給那些伺服器請求將瀏覽程式一直不成功在那些規定秒的數量之後。 =項目mysql _ init _ 命令 如果你的DSN 包含選擇" mysql _ init _ 命令 _ 瀏覽程式= # #" , 那時 當連接MySQL伺服器時,這個SQL語句被執行。 如果reconnection 發生,它被自動重新執行。 mysql _ 讀 _ 預設 _ 檔案 mysql _ 讀 _ 預設 _ 電子部落 這些選擇用來讀能檔案喜歡的配置/等等/my.cnf或者/.my.cnf。 因對方未出場MySQL的C客戶訊息庫不與客戶機程式(mysql,mysqladmin,)不同使用任何配置檔案 那做,但是除C客戶圖書館外。 因此你需要明確地請求讀一個配置檔案,在裡當時 美元dsn = "DBI︰mysql︰試驗; mysql _ 讀 _ 預設 _ 檔案= / 家/ joe /我的.cnf" ; 美元dbh = DBI>連結(美元dsn,美元用戶,美元密碼) 選擇mysql _ 讀 _ 預設 _ 組能用來在配置檔案過程中指定系統預置組︰ 通常這是客戶組,但是看見下列例子︰ [客戶 ] 主人= localhost [perl ] 主人= perlhost (注意入口的命令﹗ 那些例子意愿並非工作,你反轉 [客戶 ]並且 [perl ]部分﹗) 如果你讀這個配置檔案, 然後你將通常連接localhost。 不過,透過使用 美元dsn = "DBI︰mysql︰試驗; mysql _ 讀 _ 預設 _ = perl 組; " . "mysql _ 讀 _ 預設 _ 檔案= / 家/ joe /我的.cnf" ; 美元dbh = DBI>連結(美元dsn,美元用戶,美元密碼) ; 你將連接perlhost。 注意如果你指定系統預置組並且不指定一個檔案, 然後預設配置檔案全部將被讀。 看C 功能mysql的文檔編製 _ 選擇() 對於細節來說。 mysql _ 插座 自MySQL 3.21.15起,選擇用於連接伺服器的Unix 插座是可能的。 這做,例如,有 mysql _ 插座= / dev/mysql 通常不需要這種選擇,除非與安進客戶的那相比較,你正對於插座使用另一個位置。 mysql _ ssl 真值向客戶進攻 _ 當連接MySQL 數據庫時,SSL 旗︰ mysql _ ssl = 1 這表明你的與伺服器的聯繫將被加密。 如果你轉動mysql _ ssl在上,你可能也希望使用下列旗︰ mysql _ ssl _ 客戶 _ 鑰匙 mysql _ ssl _ 客戶 _ 必然發生的事情 mysql _ ssl _ ca _ 檔案 mysql _ ssl _ ca _ 道路 mysql _ ssl _ 密碼 這些用來對mysql 指定一個電話的各自的參數 _ ssl _ 確定,如果mysql _ ssl被取決於。 mysql _ 地方新聞 _ infile 自MySQL 3.23.49起,負荷數據的本地能力可能在MySQL客戶圖書館裡因對方未出場生理殘障。 如果你的DSN 包含選擇" mysql _ 地方新聞 _ infile = 1" ,負荷數據當地人將被使成為可能。 (但是,這選擇無效的* *伺服器也成形不承認地方如果.) mysql _ 多 _ 陳述 自MySQL 4.1起,對多語句的支援seperated 以分號(;) 可能透過使用這種選擇被使成為可能。 如果伺服器邊準備陳述,使這種選擇成為可能可能引起問題也被使成為可能。 準備陳述支援(伺服器面準備)的無論什麼 自3.0002起 _ 1,伺服器邊準備陳述關於因對方未出場是(如果你的伺服器是>= 4.1.3) . 自3.0009起, 他們帶著準備的陳述再次因對方未出場由於問題離開API(全部其他mysql 連接器被朝這個方向確定, 直到C API 問題被解決) . 使用準備的陳述的要求仍然保持你有一台伺服器>= 4.1.3 為了使用伺服器,邊準備陳述,你所需要做的全部事情被規定易變的mysql _ 伺服器 _ 準備在過程中連結︰ 美元dbh = DBI>連結(" DBI︰mysql︰數據庫=測試; 主人= localhost; mysql _ 伺服器 _ 準備= 1" ,"","",{RaiseError =>1,AutoCommit =>1 } ); *註釋︰ 這param的delimiter '; ' 有很多好處對使用伺服器邊準備陳述, 因為那個一個單個的陳述準備接受多插入物價值的事實,主要你正執行很多插入物。 為了保證'做考試' 台階試驗是否伺服器準備工作,你只需要退場門env 易變的MYSQL _ 伺服器 _ 準備︰ 退場門MYSQL _ 伺服器 _ 準備= 1 mysql _ 嵌入 _ 期權 選擇能用來遞給嵌入的服務生'命令行' 選擇。 例子︰ 使用DBI; 美元testdsn =" DBI︰mysqlEmb︰數據庫=測試; mysql _ 嵌入 _ 選擇=幫助,囉嗦" ; 美元dbh = DBI>連結(美元testdsn," 一" ,"b" ); 這將引起命令行對被列印的被嵌入的MySQL伺服器訊息庫幫助。 mysql _ 嵌入 _ 電子部落 選擇能用來在配置檔案(my.cnf)過程中指定組 將用來為嵌入的服務生拿到選擇。 如果不指定 [伺服器 ]並且 [嵌入 ]組將被使用。 例子︰ 美元testdsn =" DBI︰mysqlEmb︰數據庫=測試; mysql _ 嵌入 _ = 組嵌入 _ 伺服器,公用草地" ; 私人MetaData 方法 ListDBs 我的美元drh = DBI>安裝 _ 司機(" mysql" ); @分貝 = 美元drh>func(" 美元hostname︰美元港口" ,' _ ListDBs ') ; @分貝 = 美元drh>func(美元美元,hostname連通,' _ ListDBs ') ; @分貝 = 美元dbh>func(' _ ListDBs ') ; 返回一全部數據庫的目錄以在美元hostname,港口美元港口上營運的MySQL伺服器管理。 這是一種遺產方法。 相反,你應該使用這種便攜式方法 @分貝 = DBI>數據 _ 來源(" mysql" ); 伺服器管理 管理 美元rc = 美元drh>func(" createdb" ,美元dbname, [主人,用戶,密碼, ],' 管理') ; 美元rc = 美元drh>func(" dropdb" ,美元dbname, [主人,用戶,密碼, ],' 管理') ; 美元rc = 美元drh>func(" 關閉" ,[主人,用戶,密碼, ],' 管理') ; 美元rc = 美元drh>func(" 再裝填" ,[主人,用戶,密碼, ],' 管理') ; 或者 美元rc = 美元dbh>func(" createdb" ,美元dbname,' 管理') ; 美元rc = 美元dbh>func(" dropdb" ,美元dbname,' 管理') ; 美元rc = 美元dbh>func(" 關閉" ,' 管理') ; 美元rc = 美元dbh>func(" 再裝填" ,' 管理') ; 對伺服器管理來說你需要一個伺服器連接。 為獲得這個連接你有兩種選擇︰ 兩者中任何一個使用一司機辦理(drh) 並且提供那些適當辯論(主人,預設用戶,預設,localhost與"並且密碼,預設對") . 一位司機操作可以被獲得用 美元drh = DBI>安裝 _ 司機(' mysql ') ; 否則重新使用現有的對數據庫的連接處理(dbh) . 只有提供給管理的可與米(y)相比較的目的的一個功能 sqladmin 計畫。 的命令執行取決於第一辯論︰ createdb 創建數據庫美元dbname。 相當於" m ( y ) sqladmin創造美元dbname" . dropdb 下降數據庫美元dbname。 相當於" m ( y ) sqladmin下降美元dbname" . 應當指出為無論如何數據庫刪除沒被引起。 也不天氣消除能幹從那裡DBI。 一旦你發行dropDB() 方法,數據庫將消失﹗ 這些種方法應該被由自己負責使用。 關閉 悄悄關閉數據庫發動機。 (沒有促使﹗) 相當於" m ( y ) sqladmin 關閉" . 再裝填 再裝填伺服器配置檔案和/或表格。 如果你修改進入特權或者創造新用戶,這可能特別重要。 -------------------------------------------------------------------------------- 數據庫處理 DBD︰ :mysql 司機支援下列數據庫的屬性處理(只讀) : 美元errno = 美元dbh> {' mysql _ errno ' }; 美元錯誤 = 美元dbh> {' mysql _ 錯誤' }; 美元訊息 = 美元dbh> {' mysql _ hostinfo ' }; 美元訊息 = 美元dbh> {' mysql _ 訊息' }; 美元insertid = 美元dbh> {' mysql _ insertid ' }; 美元訊息 = 美元dbh> {' mysql _ protoinfo ' }; 美元訊息 = 美元dbh> {' mysql _ serverinfo ' }; 美元訊息 = 美元dbh> {' mysql _ 統計資料' }; 美元threadId = 美元dbh> {' mysql _ 線 _ Id ' }; 這些符合mysql _ errno() ,mysql _ 錯誤() ,mysql _ 拿到 _ 主人 _ 訊息() ,mysql _ 訊息() ,mysql _ 插入 _ Id() ,mysql _ 拿到 _ proto _ 訊息() ,mysql _ 拿到 _ 伺服器 _ 訊息() ,mysql _ 統計資料() 以及mysql _ 線 _ Id() ,分別。 美元訊息 _ hashref = 美元dhb> {mysql _ dbd _ 統計資料 } DBD︰ :mysql在mysql裡跟蹤一些統計 _ dbd _ 統計資料屬性。 下列統計資料正被堅持︰ 汽車 _ 再接通 _ 沒問題 次數那DBD︰ :到mysql伺服器成功再接通的mysql。 汽車 _ 再接通 _ 失敗 次數那DBD︰ :努力對mysql再接通的mysql但是失敗。 DBD︰ :mysql 司機也支援下列屬性(s) 數據庫中,處理(讀/寫) : 美元bool _ 估價 = 美元dbh> {mysql _ 汽車 _ 再接通 }; 美元dbh> {mysql _ 汽車 _ 再接通 } =美元AutoReconnect? 1 : 0 ; mysql _ 汽車 _ 再接通 這個屬性確定是否DBD︰ :mysql 將自動給mysql再接通連接丟失。 這特徵預設到離開; 不過,如果兩個通道中的任一個 _ 界面或者模數 _ PERL envionment 變量被確定,DBD︰ :mysql 將轉動mysql _ 汽車 _ 再接通在上。 確定mysql _ 汽車 _ 再接通對在上不建議如果'鎖桌子'被使用因為如果DBD︰ :mysql 對mysql再接通全部桌子鎖將丟失。 當AutoCommit被關上,和什麼時候AutoCommit被關上時,這個屬性被忽視,DBD︰ :mysql不將自動給伺服器再接通。 mysql _ 使用 _ 結果 這個屬性迫使司機使用mysql _ 使用 _ 結果而不是mysql _ 商店 _ 結果。 前者消耗,但是傾向於堵塞其他過程的快和較少記憶。 (那為什麼mysql _ 商店 _ 結果是預設.) 確定mysql的預設價值是可能的 _ 使用 _ 結果使用幾種模式為美元歸因於dbh︰ -透過DSN 美元dbh = DBI>連結(" DBI︰mysql︰試驗; mysql _ 使用 _ 導致= 1" ,"根" ,""); -在數據庫的創造處理之後 美元dbh> {' mysql _ 使用 _ 結果' }=0 ; #disable 美元dbh> {' mysql _ 使用 _ 結果' }=1 ; #enable 確定/移置mysql是可能的 _ 使用 _ 結果在陳述的創造之後歸因於柄。 在下面看。 mysql _ 使成為可能 _ utf8 這個屬性確定是否DBD︰ :mysql 應該假定儲存在數據庫裡的線是utf8。 這特徵預設到離開。 當被確定時,一個數據從一種原文的專欄類型(炭,varchar,等等)挽回 如有必要,將讓人取決於UTF-8 旗。 這在那根線上使性格語義學成為可能。 你也將需要保證你的數據庫/桌子/ 專欄成形使用UTF8。 參閱為細節手工的mysql的第10章。 另外,取決於這面旗告訴MySQL輸入數據應該被看作UTF-8。 如果作為部分使用,這生效將只連結的那些電話() . 如果你轉動那些旗關於在之後連結,你需要發行那些指令集名字utf8得相同效應將。 這種選擇是實驗的並且可以在將來的版本裡改變。 mysql _ 捆 _ 打字 _ 猜猜 這屬性原因那些司機(努力趕上準備陳述) 為了試圖猜測是否被束的價值是數值的價值,和如果這樣的話,不引用價值。 Dragonchild 建立了這, 經營使用的發行在插入或者不斷改進大的數值的價值的一陳述內引用的性能的一方法是。 這以前被叫不安全 _ 捆 _ 打字 _ 猜測,因為它是實驗的。 我已經成功帶著取決於的這種選擇運轉這個充分的測試套,名字現下能僅僅是mysql _ 捆 _ 打字 _ 猜猜。 告誡︰ 即使你能把整數價值插入一根字符柱子中, 這柱子索引如果,你詢問柱子與整數一起估價不引用如果,它將不使用索引︰ MariaDB [測試 ]>解釋選擇 * 從那裡考試在那裡value0 = ' 3 ' \ G *************************** 1. 排 *************************** Id︰ 1選擇 _ 打字︰ 簡單的桌子︰ 測試類型︰ 裁判員可能 _ 鑰匙︰ value0鑰匙︰ value0鑰匙 _ 鏡子︰ 13名裁判員︰ 常數排︰ 1額外︰ 使用索引狀態1 排在方面確定(0.00秒) MariaDB [測試 ]>解釋選擇 * 從試驗中估價 0 = 3 -> \G *************************** 1. 排 *************************** Id︰ 1選擇 _ 打字︰ 簡單的桌子︰ 測試類型︰ 全部可能 _ 鑰匙︰ value0鑰匙︰ 無效的鑰匙 _ 鏡子︰ 無效的裁判員︰ 無效的排︰ 6額外︰ 用於1 確定划船在裡的地方(0.00秒) 見缺陷︰ https︰ //rt.cpan.org / 票/ 展示.html嗎? Id = 43822 mysql _ 捆 _ 意見 _ 位置標識符 這個屬性原因那些司機(努力趕上準備陳述) 將引起在意見裡的任何位置標識符邊界。 這不是正確的準備的陳述行為,但是一些開發者來取決於這行為,因此在4.015,我已經使它可提供 見缺陷︰ https︰ //rt.cpan.org / 票/ 展示.html嗎? Id = mysql _ 捆 _ 打字 _ 猜測可以被取決於透過 -透過DSN 我的美元dbh = DBI>連結(' DBI︰mysql︰測試','用戶名','遞給', {mysql _ 捆 _ 打字 _ 猜測=>1 }) -或者在柄創造之後 美元dbh> {mysql _ 捆 _ 打字 _ 猜猜 } =1 ; mysql _ 不 _ autocommit _ cmd 這個屬性引起司機對並非問題' 確定autocommit '或者透過明確或者使用的mysql _ autocommit() . 這在使用MySQL代理情況下特別有用。 看見故障報告︰ https︰ //rt.cpan.org /民眾/ 缺陷/ 顯示.html嗎? Id = 46308 以及︰ http://bugs.mysql.com/bug.php? Id = 32464 mysql _ 不 _ autocommit _ cmd可以被取決於透過 -透過DSN 我的美元dbh = DBI>連結(' DBI︰mysql︰測試','用戶名','遞給', {mysql _ 不 _ autocommit _ cmd =>1 }) -或者在柄創造之後 美元dbh> {mysql _ 不 _ autocommit _ cmd } =1 ; -------------------------------------------------------------------------------- 陳述操作 DBD的陳述柄︰ :mysql 支援許多屬性。 例如,你透過使用進入這些, 我的美元numFields = 美元sth> {' NUM _ _ 領域' }; 注意,只在successfull 執行之後,大多數屬性是有效的。 undef價值意愿在那個情況裡回來。 最重要的例外是mysql _ 使用 _ 結果屬性︰ 這迫使司機使用mysql _ 使用 _ 結果而不是mysql _ 商店 _ 結果。 前者消耗,但是傾向於堵塞其他過程的快和較少記憶。 (那為什麼mysql _ 商店 _ 結果是預設.) 確定mysql _ 使用 _ 結果歸因於,使用任何一個如下內容︰ 我的美元sth = 美元dbh>準備(" 質問" ,{"mysql _ 使用 _ 結果" =>1 }); 或者 我的美元sth = 美元dbh>準備(" 質問" ); 美元sth> {"mysql _ 使用 _ 結果" } =1 ; 柱子依靠的屬性,例如名字,欄目名,被作為提到一個陣列返回。 陣列指標符合被fetchrow 和相似的方法返回的陣列的指標。 例如下列代碼將列印一個桌子名字的集箱以及全部排︰ 我的美元sth = 美元dbh>準備(" 選擇 * 從美元列入議程" ); 如果(﹗美元sth) { 死" 錯誤︰ " . 美元dbh>errstr。 "\n" ; } 如果(﹗美元sth>執行) { 死" 錯誤︰ " . 美元sth>errstr。 "\n" ; } 我的美元名字 = 美元sth> {'名字' }; 我的美元numFields = 美元sth> {' NUM _ _ 領域' }; 對於(我的美元i = 0來說; 美元i<美元numFields; 美元i++) { printf(" 百分之s%s" ,$ i ? "," : "",美元美元名字 [$ i ]); } 列印" \n" ; 當(我的美元裁判員= 美元sth>fetchrow時 _ arrayref) { 對於(我的美元i = 0來說; 美元i<美元numFields; 美元i++) { printf(" 百分之s%s" ,$ i ? "," : "",美元美元裁判員 [$ i ]); } 列印" \n" ; } 你應該限制你自己的便攜式應用與變成資本或者混和字母名一起把歸於。 下檔屬性名字對DBD 私人︰ :mysql。 屬性目錄包括︰ ChopBlanks 這屬性確定一fetchrow 將離柱子價值砍在前和結尾空白是否。 砍空白不喝對最大有影響 _ 長度屬性。 mysql _ insertid MySQL有獨特的鑰匙自動估價的選擇的能力。 如果這發生,新身分證明將被儲存在這個屬性裡。 進入這個屬性的一種可選擇的模式是透過美元dbh> {' mysql _ insertid ' }. (注意到我們正在這個情況裡使用美元dbh﹗) mysql _ 是 _ 一滴 提到一系列boolean價值; 真實表明,各自的柱子是一一滴。 這個屬性只對MySQL有效。 mysql _ 是 _ 鑰匙 提到一系列boolean價值; 真實表明,各自的柱子是一把鑰匙。 這只對MySQL有效。 mysql _ 是 _ num 提到一系列boolean價值; 真實表明,各自的柱子包含數值的價值。 mysql _ 是 _ pri _ 鑰匙 提到一系列boolean價值; 真實表明,各自的柱子是一個主鍵。 mysql _ 是 _ 汽車 _ 增加 提到一系列boolean價值; 真實表明各自的柱子是一輛汽車 _ 增加柱子。 這只對MySQL有效。 mysql _ 長度 mysql _ 最大 _ 長度 提到一系列最大的柱子尺寸。 最大 _ 長度是最大身體上在結果桌子內給,長度給理論上可能的最大量。 最大 _ 長度只對MySQL有效。 mysql _ clientinfo 列舉MySQL客戶圖書館那DBD的訊息︰ :mysql被建造對︰ 列印" 美元dbh> {mysql _ clientinfo }\n" ; 5.2.0-MariaDB mysql _ clientversion 列印" 美元dbh> {mysql _ clientversion }\n" ; 50200 mysql _ serverversion 列印" 美元dbh> {mysql _ serverversion }\n" ; 50200 名字 提到一系列欄目名。 NULLABLE 提到一系列boolean價值; 真實表明這根柱子可能包含空行的。 NUM _ _ 領域 領域的數量透過一個選擇或者LISTFIELDS 陳述回來。 你可以用這檢查是否一個陳述返回一個結果︰ 一零價值表明一個非選擇陳述喜歡插入,刪除或者不斷改進。 mysql _ 桌子 提到一系列桌子名字,在一個聯合結果方面有用。 打字 提到一系列柱子類型。 發動機的本地柱子類型被製訂到便攜式象DBI一樣的類型︰ :SQL _ 整數() 或者DBI︰ :SQL _ VARCHAR() ,儘可能好。 並非全部本地類型都有meaningfull 相等,例如DBD︰ :mysql︰ :領域 _ 打字 _ 間隔被製訂到DBI︰ :SQL _ VARCHAR() . 如果你需要本地柱子類型,使用mysql _ 打字。 在下面看。 mysql _ 打字 提到一系列MySQL的本地柱子類型,例如DBD︰ :mysql︰ :領域 _ 打字 _ () 或者DBD︰ :mysql︰ :領域 _ 打字 _ 線() . 使用類型把歸於,你象DBI一樣想要便攜式類型︰ :SQL _ SMALLINT() 或者DBI︰ :SQL _ VARCHAR() . mysql _ 打字 _ 名字 類似於mysql,但是類型名字而並非號碼被返回。 任何可能的情況下,ANSI SQL名字被更喜歡。 mysql _ 警告 _ 數 警告的數量被在SQL語句的實行期間產生。 -------------------------------------------------------------------------------- 交易支援 從DBD開始︰ :mysql 2.0416,交易被支援。 交易支援工作如下︰ 因對方未出場AutoCommit 模式關於,遵循那些DBI 說明。 如果你執行 美元dbh> {' AutoCommit ' } =0 ; 或者 美元dbh> {' AutoCommit ' } =1 ; 然後司機將對0或者1把易變的autocommit規定給MySQL服務生,分別。 到1從0年改變發布將也一犯,繼那些DBI 說明之後。 方法 美元dbh>壓價() ; 美元dbh>犯() ; 發行命令犯和壓價,分別。 壓價將也被發行如果AutoCommit 模式從掉了和那些數據庫經營破壞方法被叫。 再次,這正遵循DBI 說明。 鑑於上述,你應該注意到如下內容︰ 你決不應該兌換伺服器易變autocommit手工,你忽視DBI 交易除非支援。 到空閒上的接通AutoCommit 模式或者反過來也是這樣失敗可能。 當改變AutoCommit 模式時,你應該總是檢查錯誤。 被建議的如此做的模式正使用DBI 旗RaiseError。 如果你不喜歡RaiseError,你必須象如下內容一樣使用代碼︰ 美元dbh> {' AutoCommit ' } =0 ; 如果(美元dbh> {' AutoCommit ' }) { 一個錯誤出現的#﹗ } 如果你識別錯誤當時那些AutoCommit 模式,你不再應該那些數據庫處理的使用。 換句話說,你應該拆開並且再次再接通,因為交易模式是無法預言的。 或者你可以透過檢查伺服器易變的autocommit的價值證實這種交易模式。 不過,這樣的行為不便於攜帶。 DBD︰ :mysql喝一" 再接通" 處理所謂MySQL"的特徵 早上缺陷" : 伺服器已經拆開, 最有可能由於一個瀏覽程式, 然後因對方未出場驅動器將再接通並且試圖再次執行相同的SQL語句。 不過,當AutoCommit離開時,這行為生理殘障︰ 否則那些交易狀態將完全無法預言在之後一再接通。 " 再接通" 有特色DBD︰ :mysql可以透過使用mysql被系緊 _ 汽車 _ 再接通屬性。 這行為在使用鎖桌子的代碼應該被離開因為如果那些數據庫伺服器時間在外和DBD︰ :mysql再接通,桌子鎖將丟失而沒有這樣的損失的任何指示。 -------------------------------------------------------------------------------- 多個結果下落 自3.0002 版本起 _ 5,DBD︰ :mysql 支援多結果確定(由於人哈裡森﹗)的無論什麼 . 這是這功能性的第一釋放,因此可能有問題。 如果你遇到他們,請報告缺陷﹗ 多台結果設備的基本的用法是 做 { 當(@ = 美元sth 排>fetchrow時 _ 陣列() ) { 一定裝滿; } } 當(美元sth>更多時 _ 結果) 一個例子將是︰ 美元dbh>做(" 扔如果現有someproc"的程式 ) 或者列印美元DBI︰ :errstr; 美元dbh>做(" 創造程式somproc() 決定性 開始 宣佈一,b,c,d內部; 確定= 1; 確定b = 2; 確定c = 3; 確定d = 4; 選擇一,b,c,d; 選擇d,c,b,A; 選擇b,一,c,d; 選擇c,b,d,A; 結束" ) 或者列印美元DBI︰ :errstr; 美元sth = 美元dbh>準備(' 電話someproc() ' ) | | 死美元DBI︰ :犯錯誤。 ": ". 美元DBI︰ :errstr; 美元sth>執行 | | 死DBI︰ :犯錯誤。 ": ". 美元DBI︰ :errstr; 美元rowset = 0; 做 { 列印" \nRowset" . ++ 美元i." \n ---------------------------------------\n \ n" ; foreach 美元colno(0。。 美元sth> {NUM _ _ 領域 }) { 列印美元sth> {名字 }->[美元colno ]. "\t" ; } 列印" \n" ; 當(@ = 美元sth 排>fetchrow時 _ 陣列() ) { foreach 美元領域(0。。 美元#row) { 列印美元排 [美元領域 ]. "\t" ; } 列印" \n" ; } } 直到(﹗美元sth>更多 _ 結果) 因為更多例子,請看見例如/目錄。 這在那裡有幫助DBD︰ :mysql 代碼snippits 將來將被增加。 有多個結果的問題下落 迄今,主要問題是是否你的結果設備是" 參差不齊" ,意思,你的結果的柱子的號碼不同。 改變許多專欄能導致你的手稿失敗。 這是不久將被修理的某些事情。 -------------------------------------------------------------------------------- MULTITHREADING DBD的multithreading 能力︰ :mysql 完全倚賴基礎的C圖書館︰ 模件只正用柄數據工作,或者(據我所知)沒有全球變量被進入 不安全的功能被叫的線。 因此DBD︰ :如果C圖書館是安全線並且你不把柄分給線,mysql被相信完全是安全線。 明顯的問題是︰ C圖書館線是安全的嗎? 就MySQL而論,答案" 主要" 並且,理論上,你能找到一" 是" ,C圖書館因為(因對方未出場不是.)的安全的線編輯 透過透過選擇 -要成形的用線安全客戶。 看見關於怎樣在手冊裡做一位threadsafe客戶的部分。 -------------------------------------------------------------------------------- 非同步的質問 你能每MySQL 連接做單個的非同步的質問; 這允許你把一個長期的質問提交給服務生並且讓一個事件環通知你什麼時候它準備好。 非同步質問被因為兩者中任何一個啟動確定,那些' async ' 給truthy價值把歸於用在那些DBI manpage 方法內做, 或者在在DBI裡準備manpage 方法裡。 真實的開始的' async '的創造的陳述用準備總是跑質問在manpage被叫的那些DBI內執行的asynchronously。 司機也提供3 種另外的方法︰ mysql _ async _ 結果,mysql _ async _ 準備好,以及mysql _ fd。 mysql _ async _ 所做或者執行的將有的結果返回; 即,排的數量被影響。 mysql _ async _ 如果mysql,準確準備好的返回 _ async _ 結果將不堵塞,以及不這樣的零。 如果那個柄目前沒運轉一個非同步的質問,他們兩個返回undef。 mysql _ fd 返回檔案描述符MySQL 連接的數目; 你在一條事件返回道過程中能使用這。 這是怎樣使用非同步的質問界面的一個例子︰ 使用特徵' 說'; 美元dbh>做('選擇睡眠 ( 10 ) ' , {async =>1 }); 直到(美元dbh>mysql _ async _ 準備好) { 說'還沒準備好﹗ ' ; 睡1; } 我的美元排 = 美元dbh>mysql _ async _ 結果; -------------------------------------------------------------------------------- 安裝 Windows 用戶可能略過這個部分並且對下面的WIN32 安裝透過。 其它人,繼續閱讀。 環境變量 為了方便使用,你現下能確定環境DBD的變量︰ :mysql 安裝。 你能確定任何或者所有選擇,並且透過把他們放進你的.bashrc諸如此類退場門他們︰ 退場門DBD _ MYSQL _ CFLAGS =我/usr /本地/mysql /包括/mysql 退場門DBD _ MYSQL _ 解放=" -L / usr / 當地人/ mysql /解放/ mysql-lmysqlclient" 退場門DBD _ MYSQL _ 嵌入= 退場門DBD _ MYSQL _ 配置= mysql _ 配置 退場門DBD _ MYSQL _ NOCATCHSTDERR = 0 退場門DBD _ MYSQL _ NOFOUNDROWS = 0 退場門DBD _ MYSQL _ SSL = 退場門DBD _ MYSQL _ TESTDB =測試 退場門DBD _ MYSQL _ TESTHOST = localhost 退場門DBD _ MYSQL _ TESTPASSWORD = s3kr1+ 退場門DBD _ MYSQL _ TESTPORT = 3306 退場門DBD _ MYSQL _ TESTUSER =我 最有用的可能是主機,數據庫,港口,插座,用戶和密碼。 安裝意愿第一個表情到你的mysql _ 配置, 以及你的環境變量, 然後它將由於聰明的預設猜測。 用CPAN安裝 首先,你不為安裝DBD需要一台安裝的MySQL伺服器︰ :mysql。 不過,如果你正編輯DBD,你需要至少客戶圖書館和也許集箱檔案︰ :來自來源的mysql。 就MySQL而論你能透過使用成形選擇建立一個僅用於客戶的版本 --沒有伺服器。 如果你正使用precompiled二進製, 然後象MySQL客戶和MySQL-devel或者相似的事情一樣使用剛剛選擇的RPM,取決於分發是可能的。 第一個你需要安裝DBI 模件。 為使用dbimon,一個簡單的DBI 殼它被推薦安裝數據︰ :ShowTable另一個Perl 模件。 我建議透過CPAN 模件試驗自動安裝。 試驗 perl-MCPAN-e 殼 如果你第一次使用CPAN 模件,它將引起你許多問題。 如果你最後收到CPAN,促使,進入 安裝包︰ :DBD︰ :mysql 手工安裝 如果這失敗,(例如因為你是在防火牆後面或者沒有網路訪問,所以許多原因的情況可能是哪個) ,你需要做一個手工裝置。 首先,你需要從CPAN中接模件搜尋 http://search.cpan.org/ 下列模件被要求 DBI 數據︰ :ShowTable DBD︰ :mysql 然後輸入(筆記的下列命令 - 版本正是例子) : gzip -cd DBI(版本) .tar.gz | 焦油xf - cd DBI(版本) perl Makefile.PL 做 做試驗 牌子安裝 cd。。 gzip -cd 數據ShowTable(版本) .tar.gz | 焦油xf - cd Data-ShowTable-3.3 perl Makefile.PL 做 牌子安裝 cd。。 gzip -cd DBD-mysql(版本) -tar.gz | 焦油xf - cd DBD-mysql(版本) perl Makefile.PL 做 做試驗 牌子安裝 在期間" perl Makefile.PL" 你將被引起一些問題。 其他問題是有集箱檔案和圖書館的目錄。 例如,你的檔案mysql.h在/usr /包括/mysql / mysql.h, 然後進入那些集箱目錄/ usr,同樣適合/usr /解放/ mysql / libmysqlclient.a或者/usr /解放/ libmysqlclient.so。 -------------------------------------------------------------------------------- WIN32 安裝 如果你正使用ActivePerl,你可以使用ppm安裝DBD-mysql。 對Perl 5.6來說,升級建造623或者稍後, 然後它足以運轉 ppm安裝DBI ppm安裝DBD︰ :mysql 如果你需要一個HTTP代理人,你,可能需要確定環境易變的http _ 例如象這樣,代理︰ 確定http _ 代理= http://myproxy.com:8080/ 當這寫,DBD時︰ :mysql在ActivePerl裡丟失5.8.0個倉庫。 不過,粗暴的神戶已經和善捐贈一種自己的配給,如下內容可以成功︰ ppm安裝http://theoryx5.uwinnipeg.ca/ppms/DBD-mysql.ppd 否則明確的你*需要*一個C 編譯器。 並且天氣* 必須*在被用於編輯Perl自己的的相同編譯器。 如果你沒有一個C 編譯器, 來自Perl源分發的檔案README.win32告訴你在那裡象egcs或者gcc一樣獲得自由可分發的C 編譯器。 Perl源頭可提供透過CPAN 搜尋 http://search.cpan.org 我建議為安裝DBD使用win32clients包︰ :在Win32下的mysql,在www.tcx.se上可供下載。 下列台階需要我︰ - 當今Perl 版本(5.6,當這寫時) 有一在處理C圖書館方面的問題檢測。 我建議使用下列補丁︰ ***c:\Perl\lib\ExtUtils\Liblist.pm.orig星期六2000年4月15 20︰03︰40日 ---c:\Perl\lib\ExtUtils\Liblist.pm星期六2000年4月15 20︰03︰45日 *************** ***230,235 **** ---230,239 ---- #增加" 美元配置 {installarchlib }/核心" 不履行搜索路徑 推@ libpath," 美元配置 {installarchlib }/核心" ; +如果(美元VC 和存在(美元ENV {解放 }) 並且確定(美元ENV {解放 })) { + 推(@ libpath,劈開(/; /,美元ENV {解放 })); + } + foreach(正文︰︰ParseWords︰︰quotewords(美元潛能,' \ s+ ',0 _ 解放) ){ 美元thislib = $ _ ; - 把來源選出進C:\。 這將建立一個目錄有次目錄的C:\mysql包括和解放。 重要︰ 保證這個次目錄沒被其他TCX 檔案分享﹗ 在相同的目錄裡尤其為*並非*商店做MySQL伺服器。 如果伺服器已經被在C:\mysql,裡安裝,選擇一個位置象C:\tmp,一樣那裡選出win32clients。 注意一旦你已經安裝DBD,你能完全除去這個目錄︰ :mysql。 - 選出DBD︰ :成為另一個目錄,例如C:\src\siteperl的mysql源 - 公開的一個騙局殼和把目錄變為C:\src\siteperl。 - 如果你重複建造模件,下一步只被要求︰ 保證你有一乾淨建造透過跑趕上樹 nmake realclean 如果你沒有VC++,用你的味道替換nmake,做。 如果錯誤訊息被在這步裡報告,你可能安全忽略他們。 - 跑 perl Makefile.PL 將為一些底座引起你。 真的重要的是︰ 你想要使用哪DBMS? 在這裡進入1(僅限MySQL) ,並且 你的mysql在那裡被安裝? 請把目錄告訴給我那個 包含subdir 包括。 這裡你必須輸入win32clients 目錄,例如C:\mysql或者C:\tmp\mysql。 - 按慣例繼續︰ nmake nmake安裝 如果你想要為ActiveState Perl 版本建立PPM包, 然後修改上述台階如下︰ 跑 perl Makefile.PL名字= DBD-mysql二進製 _ = DBD-mysql.tar.gz 位置 nmake ppd nmake 一旦那被做,使用焦油和gzip(例如來自CygWin32 分發的那些) 建立檔案︰ mkdir x86 焦油cf x86 / DBD-mysql.tar blib gzip x86 / DBD-mysql.tar 把檔案x86 / DBD-mysql.tar.gz和DBD-mysql.ppd 放到一些萬維網伺服器上和透過打字安置他們 安裝http://your.server.name/your/directory/DBD-mysql.ppd 在PPM 計畫裡。 -------------------------------------------------------------------------------- 作者 最初,有一位非DBI的司機,Mysql,這是很象象mysql 和mysqli那樣的PHP 司機。 安得烈亞斯K 最初寫了Mysql 模件嗎? nig仍然,直到今天,把補丁獻出到DBD︰ :mysql。 Mysql的一個努力趕上的版本被提供到DBD︰ :mysql從Jochen Wiedmann那裡,但是最終反對另一幾捆保持的代碼當時。 DBD的第一個化身︰ :mysql被短吻鱷Descartes開發,誰也被蓋理•謝伊芳幫助並且唆使,安得烈亞斯K? nig和蒂姆外快。 DBD的當今的化身︰ :Jochen Wiedmann 寫了mysql, 然後許多變化和缺陷修理被魯迪Lippan 增加。 下一步,準備陳述支援培特裡克增加(此外,soley增加嵌入的伺服器誰支援)的加爾布雷思和Alexy Stroganov . 過去7 年中DBD︰ :培特裡克•加爾布雷思(patg@patg.net)已經維持mysql 跟一直送補丁並且使培特裡克的工作更容易的Perl 開發者的整個社區一起。 -------------------------------------------------------------------------------- 貢獻 想有助於這項工程的任何人被鼓勵如此做。 目前,這項工程的sourcecode可能被在Github 發現︰ git︰ //github.com / CaptTofu / DBD-mysql.git 或者叉子這倉庫和生產maintainer 能給他樹合併,或者創造與git一起的一種困難的一分支與你changeset一起。 那些maintainer非常高興接受那些社區的貢獻當時多特徵並且從DBD那裡確定︰ :mysql已經來自社區。 -------------------------------------------------------------------------------- 版權 這個模件是大的部分版權(c) 2004-2010培特裡克•加爾布雷思大的部分版權(c) 2004-2006 Alexey Stroganov 大的部分版權(c) 2003-2005魯道夫Lippan 大的部分版權(c) 1997-2003 Jochen Wiedmann,帶有代碼部分版權(c) 1994-1997他們的有創見的作者這個模件被在與Perl本身相同的許可證下鬆開。 欲了解詳細訊息,參見Perl README。 -------------------------------------------------------------------------------- 郵寄名單支援 這個模件被保持並且在一個郵寄名單上支援, perl@lists.mysql.com 為了訂閱這個目錄,去 http://lists.mysql.com/perl? 附屬= 1 郵寄名單檔案可提供在 http://lists.mysql.com/perl 通常,另外你可以試驗dbi 用戶關於DBI和它的模件的問題的郵寄名單。 預定透過 dbi-users-subscribe@perl.org 郵寄名單檔案在是 http://groups.google.com/group/perl.dbi.users? hl = en&lr = 此外,主要DBI 場所在 http://dbi.perl.org/ 以及來源︰ git︰ //github.com / CaptTofu / DBD-mysql.git -------------------------------------------------------------------------------- 附加DBI 訊息 關於DBI 工程的附加訊息可能被在在下列URL 的萬維網上發現︰ http://dbi.perl.org 這裡文檔編製,郵寄名單和郵寄名單檔案和模件的最新的版本的指標的指標可以被使用。 關於DBI界面本身的訊息可以透過打字被獲得︰ perldoc DBI 現下﹗ -------------------------------------------------------------------------------- 缺陷報告,提升/特徵請求 請報告缺陷,全部訊息象DBD那樣需要包括︰ :mysql 版本,MySQL 版本,OS 類型/ 版本,等等對這連接︰ http://bugs.mysql.com/