Yii Framework 本身對資料庫的操作除了提供 Active Record 以外,也有提供類似 ZendFramework Zend_Db_Table 以物件透過函式組合 SQL 語法的方法:CDbCommand。
基本的使用方式是:
danielhuang030 發表在 痞客邦 留言(0) 人氣(10)
簡單紀錄一下幾個在 PHP 中讓效能更好的方法,其實基本的原則就是「少用函式,多用 isset() 或 empty() 取代」
1. 用 (int) $var 取代 intval($var)
danielhuang030 發表在 痞客邦 留言(1) 人氣(95)
喔~大概有八百年沒有寫文章了...(汗)最近遇到一個需求,需要用到 cookie 紀錄;不過在實作的過程中,發現明明以 AJAX 在 PHP 中 setcookie(),重新整理後卻無法取得 $_COOKIE 資訊的問題。後來以關鍵字餵了 google 大神以後,才找到解決的方法:
1. 設定 setcookie() $path 參數:
以 AJAX 設定 cookie 時,如果沒有指定 $path 參數程式會自動指定一個虛擬目錄給它,但依照 cookie 的特性:「僅有它的目錄以及以下的子目錄能夠存取」;所以未指定 $path 參數的 cookie 可能會造成在其他目錄下的程式無法存取。一勞永逸的方式就是直接指定 $path 參數為根目錄「/」:
<?php
// 第三個參數是 cookie 的存活時間,0 表示存活至瀏覽器關閉為止
setcookie('variable', $value, 0, '/');
?>
danielhuang030 發表在 痞客邦 留言(0) 人氣(100)
PHP 從 PHP5 開始,在資料庫操作方面新增了 PDO(PHP Data Objects)的 extension,利用物件導向的方式與資料庫進行溝通。捨棄以往透過單一函式的方式,而是透過物件導向程式設計的抽象化概念,操作時使用統一的方法,如果需要更換資料庫時,只要在建立物件時給予資料庫的形式,而不用更動到原來的程式碼。這也是物件導向程式設計擁有優良靈活性的最佳表現!
連線的方式:<?php
// 給定資料庫變數
$dbtype_sql = 'mysql';
$host_sql = 'localhost';
$dbname_sql = 'dbname';
$username_sql = 'username';
$password_sql = 'password';
// 資料庫連線
try {
$dbh = new PDO($dbtype_sql . ':host=' . $host_sql . ';dbname=' . $dbname_sql, $username_sql, $password_sql);
// 資料庫使用 UTF8 編碼
$dbh->query('SET NAMES UTF8');
} catch (PDOException $e) {
echo 'Error!: ' . $e->getMessage() . '<br />';
}
?>
danielhuang030 發表在 痞客邦 留言(2) 人氣(338)
一般在使用 ZendFramework 的 Zend_Db_Table_Rowset fetchAll() 時,都是需要 Rowset 裡面全部的資料;不過偶爾有會有只需要單筆資料列的情況,這個時候就可以藉助 current() 或是 getRow() 取得單筆資料列。
current() 很單純,就是目前 Rowset 中指向的資料列,通常在沒有指定指標的情況下,就是該 Rowset 中的第一筆資料:
$table = new Table();
$select = $table->select();
$rowset = $table->fetchAll($select);
$row = $rowset->current();
// 這裡的 $row 就會是 $rowset 的第一筆資料列。
danielhuang030 發表在 痞客邦 留言(0) 人氣(2)
最近在練習中有用到搜尋的功能。一般對MySQL資料庫作搜尋,常用的做法是針對資料表中的特定欄位,用「%」LIKE的方式去尋找。然而這樣的做法常伴隨著許多限制,使用者必須先選定所要輸入的資料欄位,再對其進行搜尋;習慣了Google搜尋所帶來的便利,最理想的方式是只有一個輸入格,且可以在此輸入格中任意輸入,即可對整個資料庫進行搜尋。在MySQL中稱為Full-Text(全文檢索);然而拜完Google大神以後,網路上前輩們幾乎是一面倒的否定全文檢索。最主要的原因是因為它不支持中文!
全文檢索的做法,即是對資料庫裡的資料進行「分詞」的索引處理,有了索引,搜尋起來自然有效率的多;然而中文字不同於英文,一個句子中單獨一個中文字就可能有它的意思,另一個最大的分別在於中文句子可不像英文句子由單字與「空格」組成;建立索引時的「分詞」的動作,就是以空格進行判斷!
全文檢索的問題在網路上一直存在著,但是前輩們似乎都沒有非常完美的解答;甚至有人直接勸退提問者:「全文檢索的功能,是可以讓你寫好幾篇博士論文的研究!」如此可見,Google雲端運算
danielhuang030 發表在 痞客邦 留言(3) 人氣(14)
在PHP中最常見的應用就是互動表單,因此接收用戶端資訊是非常常見的事!然而俗話說:「世風日下,人心不古」,這年頭誰知道用戶端的人在想些什麼?用戶端送出的資訊很有可能會包含一些惡意的語法,對於24小時暴露在網路環境的網站來說,時時刻刻都得小心防範駭客的攻擊,提升自我的資訊安全觀念非常重要。所以在接收用戶端資訊後,存入資料庫之前,都會先對其進行基本的過濾;第一個要判斷的就是HTML語法的攻擊!
許多惡意語法都是建立在HTML上,PHP本身有提供轉換HTML碼的函數:htmlspecialchars()與htmlentities();其中htmlspecialchars()只會轉換HTML相關碼:
danielhuang030 發表在 痞客邦 留言(0) 人氣(58)
ZendFramework是PHP的一個開發用框架,主要以PHP5作為撰寫時的基礎。要使用之前當然得先建立環境,以下是安裝的順序:參考「在Zend Framework上開發一個HelloWorld」
1、首先先從ZendFramework的官方網站下在最新版本的ZendFramework 1.5.1;解壓縮後放在任意資料夾。我是放在「C:\ZendFramework」這個目錄下。
danielhuang030 發表在 痞客邦 留言(0) 人氣(2)
一般正常在處理Big5<->UTF-8編碼上的轉換,第一個想到的就是iconv()函數;雖然需要額外安裝iconv函式庫,不過因為大部分人都有這種需求,虛擬主機商一般都會安裝,如果是自己的主機就更沒有這種問題了~
在Big5轉換成UTF-8方面,完全沒有問題;不過在UTF-8轉換成Big5方面,可就出現問題啦!因為UTF-8編碼對應的字遠比Big5編碼多,所以在一些特殊中文字的轉換上,如:堃、犇等字,iconv()函數就會出現錯誤啦!本來一直都沒有發現到這方面的問題,不過最近在公司專案管理系統上的Excel表轉出時,遇到有對方公司有「犇」這個字,讓iconv()函數發生錯誤而導致轉出的Excel檔案整個損壞的情況發生...Excel在正常輸入時是對應UTF-8編碼的,不過在轉出檔案時必須改為Big5編碼,不然UTF-8編碼的中文字會變成亂碼~無法自動判斷真是傷腦筋耶!
danielhuang030 發表在 痞客邦 留言(6) 人氣(333)
danielhuang030 發表在 痞客邦 留言(0) 人氣(301)