css

顯示具有 PHP 標籤的文章。 顯示所有文章
顯示具有 PHP 標籤的文章。 顯示所有文章

2013年11月5日 星期二

PHP’s PDO

PDO (PHP Data Object) 提供了一個 Abstraction Layer 來操作資料庫


連接DB

  1. define('DB_NAME','mydb');
  2. define('DB_USER','username');
  3. define('DB_PASSWD','userpwd');
  4. define('DB_HOST','localhost');
  5. define('DB_TYPE','mysql');
  6. try{
  7.    $dbh = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWD,
  8.                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  9.    $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //錯誤訊息提醒
  10.    }
  11. catch (PDOException $e){
  12.      echo 'Error!: ' . $e->getMessage() . '<br />';
  13.      }


  • PDO 是 Abstraction Layer 所以就算更換儲存媒介,需要花的功夫比起來是最少的;將DB_TYPE改掉,即可移到不同DB使用。
  • PDO 可以透過 PDO::setAttribute 來決定連線時的設定,像是 Persistent Connection, 回傳錯誤的方式(Exception, E_WARNING, NULL)。甚至是回傳欄位名稱的大小寫…等等 
      PDO Drivers
      Connections and Connection management
      PDO::setAttribute
      PDOException 



查詢

    ex1:

  1. $sql = 'select ArticleDate,ChineseTitle,SubChineseTitle from Article where 
           ArticleDate=:seldate';
  2. $sth = $dbh->prepare($sql);
  3. $sth ->execute(array(':seldate' => $seldate));


    ex2:
     
  1. $sth = $dbh->prepare('insert into Article(ArticleDate,Type,EngTitle,ChineseTitle)values (:date,:type,:et,:ct)');
  2. $sth->bindParam(':date',$seldate);
  3. $sth->bindParam(':type',$_POST["type"], PDO::PARAM_STR,15);
  4. $sth->bindParam(':et',$_POST["EngTitle"], PDO::PARAM_STR,30);
  5. $sth->bindParam(':ct',$_POST["ChineseTitle"], PDO::PARAM_STR,30);
  6. $sth->execute() 
  • PDO 支援 Bind Column 的功能,除了基本的 Prepare, Execute 以外,也可以 Bind 單一欄位,並且指定欄位型態。
     Prepared statements and stored procedures
     Predefined Constants   PDO::PARAM
     PDOStatement


取資料

     ex1:
  1. $obj = $sth->fetch(PDO::FETCH_ASSOC);
  2. echo $obj["ArticleDate"];
  3. echo $obj["ChineseTitle"];
  4. echo $obj["SubChineseTitle"];
   
     ex2:
    
  1. $obj = $sth->fetch(PDO::FETCH_OBJ);
  2. echo $obj->ChineseTitle
  3. echo $obj->SubChineseTitle
      
      PDOStatement::fetch
      PDOStatement::fetchAll


參考資料
PDO vs. MySQLi: Which Should You Use?
淺談 PHP-MySQL, PHP-MySQLi, PDO 的差異
PHP MYSQL PDO
[解決] Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
PDO 基本用法
Comparison of PHP Database Abstraction Classes

2013年10月28日 星期一

CentOS 安裝 Xdebug

安裝前 phpinfo 內 zend圖案









1. 用 pecl 安裝

安裝指令  sudo pecl install xdebug

錯誤訊息 :  phpize not found (找不到此指令)

網路上搜尋後,有人說在Debian/Ubuntu要先裝 php5-dev



2.安裝 php dev

搜尋yum search php5-dev   =>no matches found(在centos內沒有php5-dev)

搜尋yum search php-dev  => php-devel.x86_64

安裝 yum install php-devel



3.再次用pecl 安裝xdebug

  pecl install xdebug   安裝成功



4.php.ini 設定 zend_extension=xdebug.so  

   官方網站說要使用完整路徑

   先搜尋安裝位置 find / -name xdebug.so

   找到檔案位置 /usr/lib64/php/modules/xdebug.so

   修改php.ini  :  vim /etc/php.ini 
    到檔案尾端加入一行
 
     zend_extension="/usr/lib64/php/modules/xdebug.so"

     存檔離開 :wq

官網提示
Note: You should ignore any prompts to add "extension=xdebug.so" to php.ini — this will cause problems.



5. 重新啟動WEB Server

     /etc/rc.d/init.d/httpd restart



6.到 phpinfo 頁面確認

   安裝後 phpinfo 內圖樣 多了一行with Xdebug ...
 



Xdebug 官方網站安裝說明
http://xdebug.org/docs/install



補充:要已安裝 php-pear  ,才能用 pecl 指令

2013年10月17日 星期四

PHP session.save_path

PHP session 設定參數 ( php.ini)


session.save_path = "/var/lib/php/session"  (centos環境下路徑)


Runtime Configuration 



PHP session 暫存檔過多的注意事項

error_reporting() php.ini

error_reporting    設定回報哪些類型的php錯誤

 int error_reporting ([ int $level ] )

此函式設定php執行的錯誤回報等級,若無指定level層級,則使用目前層級(定義在php.ini內 error_reporting)

level 等級可以用數字或名稱來指定;

但隨著php更新,新的error level 等級加入,用數字的表示error level 可能造成錯誤的結果,

保險的方法還是用名稱設定 error level




原函式定義
http://php.net/manual/en/function.error-reporting.php

錯誤等級的定義
http://www.php.net/manual/en/errorfunc.constants.php

位元運算
http://www.php.net/manual/en/language.operators.bitwise.php

Runtime錯誤回報設定
http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting



在 php.ini 內 (約513行)  

error_reporting  =  E_ALL & ~E_NOTICE




2013年7月3日 星期三

解決:打開phpMyAdmin後,出現缺少mcrypt 外掛。請檢查PHP 設定。 php-mcrypt

登入phpMyAdmin 後下方出現缺少mcrypt 外掛。請檢查PHP 設定。

解決方式:

指令安裝下列epel rpm

32位元:
rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

64位元:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

上述根據伺服器版本擇一安裝,系統安裝完畢後接著輸入底下指令

執行phpinfo就可以看到mcrypt模組已完成安裝而phpMyadmin 系統內出現"缺少mcrypt 外掛。請檢查PHP 設定。"訊息消失