[轉載]在php-5.1.4中使用mysqli
作者: piggy 發布日期: 2006-6-20 查看數: 65 出自: http://www.phpx.com/viewarticle.php?id=119200
我一直都在用php4,很少接觸php5。由於學習的需要,慢慢去接觸了php5,瞭解了php5的物件導向,MySQL i擴充庫,SPL及pdo等等新的特性。請別笑,我對php5接觸得還是比較少。 為了能夠使用php5,我搭建了php-5.1.4 mysql-5.0.22 IIS-5.1運行環境,安裝php及mysql的資料比較多,這裡不重複了。 我進階的第一個目標就是mysqli,為了使用mysqli,你得在php.ini裡增加一行extension=php_mysqli.dll,這個dll內建在php5.1.4的ext檔案夾裡,重啟www服務即可以使用mysqli擴充庫了(部份使用者可能需要重啟)。 配置完後,使用mysqli的物件導向編程方式編寫如下代碼: [php] <?php $db = new mysqli("localhost","root","123456","test"); $db->set_charset("utf8"); $rs = $db->query("SELECT * FROM `gallery_ablum`"); while($row = $rs->fetch_assoc()) { echo $row['Name'],"
"; } $rs->close(); $db->close(); ?> [/php] 興沖沖的放在網站下運行該代碼,結果卻發現指令碼有錯誤“使用了未定義的set_charset函數”,難道pphp5.1.x不再支援mysqli?於是我注釋了第二行,結果卻發現,程式是成功執行成功的!我很開心,終於可以顯示資料了,雖然有一部份資料是亂碼(亂碼是因為我用了utf8編碼,而mysqli串連預設用了laint1) 接下來我一口氣試了mysqli裡的函數,結果發現大部份還是可用的。但字元集的問題就不可以解決了嗎?如果不能解決,對用其它資料庫編碼的的程式,就不能使用了。於是我試試將第二行的語句換成$db->query("SET NAMES utf8");,執行成功,卻沒能像我預期中的那樣解決了亂碼,使用echo $db->character_set_name();查看當前的編碼,還是laint1。 我還不死心,上php.net裡查看資料,終於知道php.net裡發布的php_myqli.dll真的不能使用這個函數,而mysql卻提供了這個dll。是:http://dev.mysql.com/downloads/connector/php,這個頁面裡,mysql聲明這個connector與php.net提供的唯一區別就是:mysql提供的是最新版本的!而且mysql建議我們使用php5.1.4及mysql5.0.22,所以也只提供了這二個相關的connector下載。 connector的安裝很簡單,停止www服務覆蓋根目錄下的libmysql.dll及ext目錄下的php_mysqli.dll檔案即可。 當我開心的開啟瀏覽器執行前面的代碼時,卻出現“Unable to load dynamic library php_mysqli.dll ,無法載入”的錯誤。我即刻暈倒。難道php與mysql真的是不是冤家不對頭嗎? 我還是很不情願,不甘心這樣放棄我的php5之路,於是我上google查資料,搜尋出來的結果比較一致的說法是缺少libmysql.dll,需要將這個庫放到php路徑裡或system32裡。我的php目錄裡明明有libmysql.dll呀(這個libmysql.dll是mysql connector裡提供的),難道要放在system32裡?copy一份libmysql.dll到system32,重啟再執行php,還是失敗。 後來我上mysql.com的支援人員裡查資料,看能不能找到一些頭緒。經過大量的瀏覽後,發現有一個人說用depends來查查,剛開始我還以為是一個自行開發的軟體,作者在此作一個廣告,不過後來我真的沒有辦法了,只有死馬當活馬醫了,上去http://www.dependencywalker.com下載了一個depends work,原來這個東西是一個類似於脫殼的軟體。結果我用它查到了mysql的connector裡用了vc7來編譯dll的,而我的機器是沒有安裝vc7的運行庫,所以不能裝載php_mysqli.dll。 原因找到了,我立即就上http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71下載msvcr71.dll運行庫,拷貝到system32系統目錄下(順便把剛才copy進來的libmysql.dll刪除了,在php目錄下保持一份就可以了),重啟,瀏覽,終於可以執行mysql新的特性了。 (註:為了方便自己的調試,我開啟了php.ini裡的display_errors及display_startup_errors) 上面是我解決的整個過程,實質上的步驟無需這麼多,安裝完php5.1.4後,上mysql網站下載mysql的php connector覆蓋php目錄下的相應檔案。再搜尋下自己系統硬碟裡是否有msvcr71.dll這個檔案,如果不存在於系統目錄裡,就下載一個並放入system32系統目錄裡。 另外,如果系統是ntfs的格式,還得注意許可權的問題。特別是剛才從網上下載過來的檔案,預設的許可權可能不夠。如果開啟了display_startup_errors參數,會有Unable to load dynamic library ***.dll 拒絕訪問的字眼。這時你就得注意下許可權的問題了。 第一次這麼認真發貼,主要是想一些剛學mysqli的朋友提供點有用的資料,而不是討論mysqli好不好的問題。由於,也很希望能與大家繼續討論下php5裡的新特性,特別是pdo及pear方面,我的郵箱zhiouzhu(at)gmail.com,歡迎你們的指點。