JQnets 甲寬程式手冊

Database Class


:: 初始化 Database 類別

include_once("database.php");  // 載入函式庫
// 初始化類別;
$DBHost = "localhost";
$DBUserName = "User";
$DBPassWord = "Pass";
$DBName = "test";
$DBCtr = new DBCtr($DBHost,$DBUserName,$DBPassWord);

:: 資料庫連線

$DBCtr->linkDB($DBName);  //不指定,預設為utf-8編碼連線
// OR
$DBCtr->linkDB($DBName,'utf-8');  //指定為utf-8編碼連線

:: 資料庫類別設定

// 資料庫回傳格式設定
$DBCtr->fetchmode  = PDO::FETCH_ASSOC ( default );
$DBCtr->fetchmode  = PDO::FETCH_BOTH;
$DBCtr->fetchmode  = PDO::FETCH_BOUND;
$DBCtr->fetchmode  = PDO::FETCH_CLASS;
$DBCtr->fetchmode  = PDO::FETCH_INTO;
$DBCtr->fetchmode  = PDO::FETCH_LAZY;
$DBCtr->fetchmode  = PDO::FETCH_NAMED;
$DBCtr->fetchmode  = PDO::FETCH_NUM;
$DBCtr->fetchmode  = PDO::FETCH_OBJ;
$DBCtr->fetchmode  = PDO::FETCH_PROPS_LATE;

// 設定編碼字元
$DBCtr->charset('utf-8');  //設定為utf-8編碼連線

// 設定為debug模式
$DBCtr->debug = TRUE;  // 若設定Debug模式,若資料庫執行錯誤,會將錯誤訊息列出

// 設定為debug_sql模式
$DBCtr->debug_sql = TRUE;  // 若設定Debug_SQL模式,則不會進行資料庫作業,只將您的SQL Code列出

:: 查詢

$testDB = $DBCtr->get("student");  // 標準的多結果查詢(陣列)

// 依需求建立條件查詢

//  1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$testDB = $DBCtr->where("id=?",array("1"))->orderby("id ASC, name DESC")->get("student",0,4);

//  2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$testDB = $DBCtr->where("id=:id",array(":id"=>"1"))->orderby("id ASC, name DESC")->get("student",0,4);

//  3. [ 強烈不建議 ]
$testDB = $DBCtr->where("id='1'")->orderby("id ASC, name DESC")->get("student",0,4);

// 自訂的多結果查詢(陣列)

// 1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("01" ,"Jimmy"));
$testDB = $DBCtr->query("SELECT * FROM test WHERE `id` = ? AND `name` = ?");

2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array(":id"=>"01" ,":name"=>"Jimmy"));
$testDB = $DBCtr->query("SELECT * FROM test WHERE `id` = :id AND `name` = name");

3. [ 強烈不建議 ]
$testDB = $DBCtr->query("SELECT * FROM student");

:: 新增

// 標準的新增查詢
$insertData = array( "name" => "張小華" );

//insert("資料表","新增資料(陣列[Key:Value])","是否回傳自動遞增ID")
$success = $DBCtr->insert("test",$insertData);

// 標準的新增查詢(回傳自動遞增ID)
//insert("資料表","新增資料(陣列[Key:Value])","是否回傳自動遞增ID")
$success = $DBCtr->insert("test",$insertData, TRUE);

// 自訂的SQL查詢

// 1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("01" ,"Jimmy"));
$testDB = $DBCtr->query("INSERT INTO `test`( `user_id`, `user_pw`) VALUES (?, ?);",TRUE);

// 2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("id"=>"01" ,"name"=>"Jimmy"));
$testDB = $DBCtr->query("INSERT INTO `test`( `user_id`, `user_pw`) VALUES (?, ?);",TRUE);

// 3. [ 強烈不建議 ]
$success = $DBCtr->query("INSERT INTO student (id, name, gender, addr) VALUES('104002','張大令','F','台灣')",TRUE);

:: 修改

// 標準的修改查詢
$updateData = array( "name"	=>	"Jimmy" );

//update("資料表","修改資料(陣列[Key:Value])","修改條件值")
$success = $DBCtr->update("test",$updateData,"id='1'");

// 自訂的SQL查詢

//1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("01" ,"Jimmy","01"));
$testDB = $DBCtr->query("UPDATE test SET user_id = ?,user_pw = ? WHERE user_no=?",TRUE);


//2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("id"=>"01" ,"name"=>"Jimmy","no"=>"01"));
$testDB = $DBCtr->query("UPDATE test SET user_id = ?,user_pw = ? WHERE user_no=?",TRUE);


//3. [ 強烈不建議 ]
$success = $DBCtr->query("UPDATE test SET name = 'Jimmy' WHERE id='2'");

:: 刪除

// 標準的刪除查詢

// 1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$testDB = $DBCtr->delete("test","id=?",array("5"));

// 2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$testDB = $DBCtr->delete("test","id=:id",array("id"=>"5"));

// 3. [ 強烈不建議 ]
$success = $DBCtr->delete("test","id='3'");

// 自訂的SQL查詢

// 1. [ 建議 ] prepare 參數使用1 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("01"));
$testDB = query("DELETE FROM test WHERE user_no=?",TRUE);

// 2. [ 建議 ] prepare 參數使用2 - 防SQL Injection 攻擊
$DBCtr->whereQuota(array("01"));
$testDB = query("DELETE FROM test WHERE user_no=?",TRUE);

// 3. [ 強烈不建議 ]
$success = $DBCtr->query("DELETE FROM test WHERE name = 'Jimmy' WHERE id='2'");