1 / 16

資料庫抽象層 EzSQL

資料庫抽象層 EzSQL. IDIC. 網頁取存資料庫. 網頁會因為使用者的需求不同而使用不同資料庫 不同資料庫的連結方式都不同 PHP 有提供不同資料庫的存取函數. MSSQL. MySQL. Oracle. PHP. PHP. PHP. 會員管理. 會員管理. 會員管理. 訂單管理. 訂單管理. 訂單管理. 書藉管理. 書藉管理. 書藉管理. 書籍銷售系統. 書籍銷售系統. 書籍銷售系統. 資料庫連線的方式不同. MySQL $link = mysql_connect ('host', 'user', 'password');

kamali
Download Presentation

資料庫抽象層 EzSQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料庫抽象層EzSQL IDIC

  2. 網頁取存資料庫 • 網頁會因為使用者的需求不同而使用不同資料庫 • 不同資料庫的連結方式都不同 • PHP 有提供不同資料庫的存取函數 MSSQL MySQL Oracle PHP PHP PHP 會員管理 會員管理 會員管理 訂單管理 訂單管理 訂單管理 書藉管理 書藉管理 書藉管理 書籍銷售系統 書籍銷售系統 書籍銷售系統

  3. 資料庫連線的方式不同 • MySQL • $link = mysql_connect('host', 'user', 'password'); • mysql_select_db(“db_name"); • $results = mysql_query($sql); • Oracle • $link = oci_connect('user', 'password', 'localhost/XE'); • $query = oci_parse($link, $sql); • oci_execute($query); • MSSQL • $link = mssql_connect($server, 'user ', 'password'); • mssql_select_db("myDB", $link); • $results = mssql_query($query);

  4. 使用的 SQL 語法不同 • 各種資料庫取得前十筆資料的 SQL 語法 • MySQL • SELECT * FROM mytable LIMIT 0,10 • MSSQL • SELECT TOP 10 FROM mytable • Oracle • SELECT * FROM mytable WHERE ROWNUM = 10 ORDER BY ROWNUM ASC

  5. 資料庫的相容性問題 • 每一套資料庫都有著不同的連線方式 • 不同的協定 • 不同的連線參數 • 在使用時我們必須使用不同的函數連線 • 若要轉移資料庫會成為巨大的工程 • 每一套資料庫都有著不同的 SQL 語法 • 即使 ANSI 有規範 SQL 標準的寫法 • 但實際在使用不同資料庫的 SQL 上仍有許多差異

  6. 資料庫抽象層 • Database Abstraction layer, DBAL • DBAL 主要要解決的主要問題 • 統一資料庫的連線方式 • 統一 SQL 的語法撰寫 • SQL 語法可繼承使用 • 缺點 • 開發人員需要額外學習 DBAL 的使用方式 • 每套 DBAL 都有不同的寫法,能解決問題的程度也不盡相同 • DBAL 無法表達所有的語法,只有常用/通用的語法 • 執行的效率較差 • 程式需要額外組合 SQL 語法 MySQL MSSQL Oracle Database abstraction layer query(); PHP DBAL 架構

  7. ezSQL • PHP DBAL 套件 • 解決連線不同資料庫的問題 • 支援的資料庫 • MSSQL • MySQL • PostgreSQL • Oracle • SQLite • 在此使用的 ezSQL 只解決了在連線不同資料庫的問題並未解決 SQL 語法相容性的問題,但仍有其他 DBAL 套件有解決 SQL 語法問題

  8. ezSQL安裝 • 下載 • https://github.com/jv2222/ezSQL • 解壓縮至專案目錄

  9. 使用 ezSQL – 連結資料庫 • db_user • 使用者帳號 • db_password • 使用者密碼 • db_name • 資料庫名稱 • db_host • 資料庫主機 // 引用 ezSQL 核心套件 include_once "ez_sql_core.php"; // 引用 ezSQL 欲使用資料庫類型的元件 (如 mySQL) // 若要更換資料庫只需更換此行引用的元件, 其餘用法相同 include_once "ez_sql_mysql.php"; // 建立連線 $db = new ezSQL_mysql('db_user','db_password','db_name','db_host');

  10. 使用 ezSQL – 設定資料庫編碼 • 表示文字的編碼方式 • 建議採用 UTF8 編碼,避免使用 BIG5 避免造成衝碼。 • $db->query("SET NAMES UTF8");

  11. 使用 ezSQL – 常用語法 • 執行新增/修改/刪除等動作 (不需取得資料) • bool $db->query($query) • 取得一筆資料的某個欄位 • var $db->get_var($query) • 取得一筆資料 的多個欄位 • mixed$db->get_row($query) • 取得所有查詢結果 • mixed$db->get_results($query) $query 表示 SQL

  12. 使用情況-查詢 (多筆) • 常用在取得資料清單,是最常使用的情況 • 由於回傳的資料為多筆因此會採用物件陣列的型態 • 須使用使用 foreach 將資料一筆一筆的讀取並做處理 • 必須指定要顯示的欄位,避免使用 * 號 • 避免取得不必要之資料節省頻寬 • 欄位取得的順序不會因為資料表的移動而改變 $students = $db->get_results("SELECT username FROM students"); foreach($students as $student) {             echo $student->name; } • $students • 查詢的結果 (多筆) • $student • 查詢的結果 (單筆) • name • 欄位名稱

  13. 使用情況-查詢 (單筆) • 常用在取得單筆資料的明細 • 由於回傳的結果為物件,不需使用 foreach • 在下 SQL 需確認取得的資料筆數是否為一筆 • 避免不必要的資料庫資源浪費 $student = $db->get_row(“SELECT username FROM students WHERE username = ‘李白’"); echo $student->name; • $student • 查詢的結果 (單筆) • name • 欄位名稱

  14. 使用情況-查詢 (單筆欄位) • 常用在取得資料的筆數或某筆資料的欄位 • 由於回傳的結果為變數 • 無須使用物件的方式取值 $total = $db->get_var("SELECT COUNT(*) FROM students"); • $total • 資料的筆數

  15. 完整範例 <?php require_once “/ezsql_path/ez_sql_core.php”; require_once “/ezsql_path/ez_sql_mysql.php”; // 連線資料庫 $db = new ezSQL_mysql('db_user','db_password','db_name','db_host'); // 設定資料庫編碼 $db->query("SET NAMES UTF8"); $query = "INSERT INTO sample_table ('sample_name') VALUES('Loln')"; $db->query($query ); // 查詢 $results = $db->get_results(“SELECT sample_id FROM sample_table"); // 印出取得的資料 var_dump($results);  ?>

  16. 作業 將會員、訂單、書籍管理等功能的資料庫操作,透過 ezSQL 去存取。

More Related