2013年10月30日 星期三

[php]符合 RFC 規範的 Email 驗證程式

要驗證 Email 是否符合規格, 大部分是使用下面的簡單 Regular expression 來作驗證 (下面兩者 regex 是一樣的, 只是 php / rails 版的寫法而已)
  • preg_match('/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/', $email) // 正確: true, 錯誤: false
  • validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => '格式錯誤'
使用上述的檢查後, 再加上 PHP 驗證 Email -檢查 DNS 的 MX 是否有通, 再來就該直接寄信去驗證了.

2013年10月22日 星期二

[php]命名空間(namespace)

為什麼我們需要命名空間?隨著你的PHP代碼庫的增長,對之前定義的函數和類名進行修改時風險也更高了,當你試圖增加第三方組件或插件時問題更嚴重,如果存在兩個或兩個以上的代碼集實現了一個“Database”和“User”類會怎麼樣?直到目前,唯一的解決辦法是使用長的類/函數名,例如Wordpress在每個類和函數名前都使用了前綴“WP_”, Zend Framework使用了極具描述性的命名約定,導致類名非常冗長,如:Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive命名衝突問題可以使用命名空間來解決,PHP常量、類和函數可以被組合到命名空間庫中。如何定義命名空間?

2013年10月18日 星期五

[mysql]SQL_CALC_FOUND_ROWS 使用

我們一般用COUNT() 或者mysql_num_rows() 來獲取查詢的行數;在MySQL4,5裡面,有SQL_CALC_FOUND_ROWS 可以在查詢的同時,計算行數:$query = "SELECT SQL_CALC_FOUND_ROWS * FROM title WHERE ID >1000 LIMIT 10;";$result = $db->query($query);$line = $db->fetch_row($db->query("SELECT FOUND_ROWS();"));print_r($line);此時,不用額外的查詢,即可得到SELECT count(id) FROM tabled WHERE id>1000;這樣子的結果了。不過,http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#limit-optimization 說:只要MySQL已經發送了需要的行數到客戶,它將放棄查詢,除非你正使用

2013年10月7日 星期一

[php]mysqli函式簡介

 mysqli 分為以下三個類別
   mysqli:負責控制與mysql的連線,執行SQL查詢,執行select後會得到查詢結果
          之mysql_result物件
   mysqli_result:內含select的查詢結果
   mysqli_stmt:用來定義執行參數化的SQL指令,需透過$mysqli->perpare建立mysql_stmt

2013年10月1日 星期二

[MySQL] VIEW簡介

MySQL資料庫的VIEW是可重組映射的表格,
好處:
  1. 資料雙向自動映射, 不管在原始表格或VIEW中有資料改變, 兩邊同步異動.
  2. 可以從多個表格關聯選取產生一個VIEW.
  3. VIEW與表格一樣都會保持存在狀態, 除非被  DROP 掉.
  4. VIEW可以如同表格一樣INSERT, UPDATE, DELETE
  5. VIEW佔用硬碟空間比表格小.

Google Analytics初學者入門簡介