-
//獲得存放結果集中一條記錄的關聯數組 public static function getRow($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC")); return $result; } //執行增刪改操作,返回受影響的記錄的條數 public static function execute($sql=null){ //獲取連接標識符 $link=self::$link; if(!$link) return false; //保存本次查詢語句 self::$queryStr=$sql; //判斷之前是否有結果集,如果有的話,釋放結果集 if(!empty(self::$PDOStatement))self::free(); //POD::exec()方法返回受影響的記錄的條數 或 false $result=$link->exec(self::$queryStr); //查看本次查詢是否有錯誤,如果有則打印本次錯誤信息 self::haveErrorThrowException(); if($result){ //保存上一步插入操作產生AUTO_INCREMENT self::$lastInsertId=$link->lastInsertId(); //保存上一步操作產生受影響的記錄的條數 self::$numRows=$result; return self::$numRows; }else{ return false; } }查看全部
-
//自定義異常處理程序 public static function throw_exception($errMsg){ echo '<div > '.$errMsg.' </div>'; } //釋放結果集 public static function free(){ self::$PDOStatement=null; }查看全部
-
//查詢語句(只能執行一條SQL語句) public static function query($sql=''){ //獲取連接標識符 $link=self::$link; if(!$link) return false; //判斷之前是否有結果集,如果有的話,釋放結果集 if(!empty(self::$PDOStatement))self::free(); //保存本次查詢語句 self::$queryStr=$sql; //預處理語句只能執行一條SQL語句 self::$PDOStatement=$link->prepare(self::$queryStr); $res=self::$PDOStatement->execute(); //查看本次查詢是否有錯誤,如果有則打印本次錯誤信息 self::haveErrorThrowException(); return $res; } //查看最近一次 查詢 或 連接 是否有錯誤,如果有則打印本次錯誤信息并返回false public static function haveErrorThrowException(){ $obj=empty(self::$PDOStatement)?self::$link: self::$PDOStatement; $arrError=$obj->errorInfo(); //錯誤信息數組下標為[0]的值為'00000'表示沒有錯誤 if($arrError[0]!='00000'){ //獲取錯誤信息并拋出異常 self::$error='SQLSTATE: '.$arrError[0].' <br/>SQL Error: '.$arrError[2].'<br/>Error SQL:'.self::$queryStr; self::throw_exception(self::$error); return false; } if(self::$queryStr==''){ self::throw_exception('沒有執行SQL語句'); return false; } }查看全部
-
//獲取存放結果集中所有記錄的關聯數組 public static function getAll($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC")); return $result; }查看全部
-
//判斷靜態變量self::$link是否還沒有沒有被賦值(即之前沒有數據庫被連接) //即在之前沒有連接其他數據庫情況下,才能開始本次數據庫的連接 if(!isset(self::$link)){ //保存本次連接參數 $configs=self::$config; if(self::$pconnect){ //開啟長連接,添加到配置數組中 $configs['params'][constant("PDO::ATTR_PERSISTENT")]=true; } try{ self::$link=new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']); }catch(PDOException $e){ self::throw_exception($e->getMessage()); } //連接失敗 if(!self::$link){ self::throw_exception('PDO連接錯誤'); return false; } //設置字符集 self::$link->exec('SET NAMES '.DB_CHARSET); //獲取服務器版本 self::$dbVersion=self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION")); //設置連接成功標志符 self::$connected=true; //釋放臨時存放連接參數變量 unset($configs); } }查看全部
-
public function __construct($dbConfig=''){ //PHP將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法 if(!class_exists("PDO")){ //判斷是否加載了PDO擴展 self::throw_exception('不支持PDO,請先開啟'); } if(!is_array($dbConfig)){ //判斷是否傳參給構造函數,如果沒有傳參則取默認值 $dbConfig=array( 'hostname'=>DB_HOST, 'username'=>DB_USER, 'password'=>DB_PWD, 'database'=>DB_NAME, 'hostport'=>DB_PORT, 'dbms'=>DB_TYPE, 'dsn'=>DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME ); } //如果用戶傳參,但沒有填寫必填 //用戶沒有填寫主機名,則拋出自定義異常程序 if(empty($dbConfig['hostname']))self::throw_exception('沒有定義數據庫配置,請先定義'); //獲取用戶連接參數,保存到自定義變量中 self::$config=$dbConfig; //用戶沒有填寫驅動的連接選項,則賦空數組為默認值 if(empty(self::$config['params']))self::$config['params']=array();查看全部
-
/* PDO::ERRMODE_SILENT:默認模式,靜默模式,完全不顯示, PDO::ERRMODE_WARNING:警告模式,拋出警告后,程序可繼續運行 PDO::ERRMODE_EXCEPTION:異常模式(UP推薦模式),錯誤信息顯示最完整,在拋出異常后程序停止運行 */ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql='SELECT * FROM noneTable'; $pdo->query($sql); echo $pdo->errorCode(); //顯示錯誤STATE碼 echo '<br/>'; print_r($pdo->errorInfo()); //顯示錯誤信息查看全部
-
當返回的PDOStatement對象中存儲了多個結果集,使用PDOStatement::fetchAll()方法每次只能取出一個結果集,此時需要使用PDOStatement ::nextRowset();移動結果集指針讓其指向下一個結果集,才能用PDOStatement::fetchAll()或者PDOStatement::fetch()方法取到下一個結果集記錄. $sql='call test1()'; //test1為SQL的PROCEDURE(存儲過程) $stmt=$pdo->query($sql); //PDOStatement對象中存儲了多個結果集 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); //只能取出一個結果集 print_r($rowset); echo '<hr color="red"/>'; $stmt->nextRowset(); //移動結果集指針 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); print_r($rowset);查看全部
-
PDOStatement::debugDumpParams()打印一條 SQL 預處理命令詳情 (沒有返回值) 直接打印出一條預處理語句包含的信息。提供正在使用的 SQL 查詢、所用參數(Params)的數目、參數的清單、參數名、用一個整數表示的參數類型(paramtype)、鍵名或位置、值、以及在查詢中的位置 SQL模板中的占位符不同,打印出來的結果也會不同查看全部
-
PDOStatement::fetchColumn()從結果集中的下一行返回單獨的一列。 //因為每次調用此方法后,記錄指針將自動指向結果集中的下一條記錄(且沒有辦法返回),在此調用時取得將是下一條記錄的對應列數據 echo $stmt->fetchColumn(0); //取第一行第一列數據 echo $stmt->fetchColumn(1); //取第二行第二列數據 echo $stmt->fetchColumn(2); //取第三行第三列數據查看全部
-
$sql='SELECT username,password,email FROM user'; $stmt=$pdo->prepare($sql); $stmt->execute(); //PDOStatement::columnCount()返回結果集中的列數 echo '結果集中的列數一共有:'.$stmt->columnCount(); //PDOStatement::getColumnMeta()返回結果集中一列的元數據(從0開始計數) print_r($stmt->getColumnMeta(0)); //PDOStatement::bindColumn()綁定一列到一個 PHP 變量(相當于給結果集的列起了別名) $stmt->bindColumn(1, $username); $stmt->bindColumn(2,$password); $stmt->bindColumn(3, $email); while($stmt->fetch(PDO::FETCH_BOUND)){ echo '用戶名:'.$username.'-密碼:'.$password.'-郵箱:'.$email.'<hr/>'; } //也可以這么綁定,第一個參數對應SQL查詢語句的列名 $stmt->bindColumn(‘username’, $username); $stmt->bindColumn(‘password’,$password); $stmt->bindColumn(‘email’, $email);查看全部
-
PDOStatement:: bindValue()將變量或者值綁定到SQL模板中(可以為變量,也可以為值) //PDOStatement:: bindValue()參數說明(占位符為[:name]情況)(UP推薦使用方式,不容易亂) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一個參數為相應的占位符,第二個參數為綁定變量(或值),第三個變量指定變量類型,(第一,二個參數必填,其他為可選) $stmt->bindValue(':username',$username); $stmt->bindValue(':password',$password); $stmt->bindValue(':email','[email protected]'); $username='imooc1'; $password='imooc1'; $email='[email protected]'; $stmt->execute(); //PDOStatement:: bindValue()參數說明(占位符為[?]情況) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一個參數為整型對應SQL模板中的第幾個問號,其他參數和使用條件與[:name]情況相同 $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,'[email protected]'); $username='imooc'; $password='imooc'; $email='[email protected]'; $stmt->execute();查看全部
-
PDOStatement:: bindParam()將變量綁定到SQL模板中(只能綁定變量而不能為確定的值) //PDOStatement:: bindParam()參數說明(占位符為[:name]情況)(UP推薦使用方式,不容易亂) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一個參數為相應的占位符,第二個參數為綁定變量(必須為變量而不能直接指定值,因為bindParam()設計時將第二個參數設定為變量的引用[&$參數二]),第三個變量指定變量類型,(第一,二個參數必填,其他為可選) $stmt->bindParam(":username",$username,PDO::PARAM_STR); $stmt->bindParam(":password",$password,PDO::PARAM_STR); $stmt->bindParam(":email",$email); $username='imooc1'; $password='imooc1'; $email='[email protected]'; $stmt->execute(); //PDOStatement:: bindParam()參數說明(占位符為[?]情況) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一個參數為整型對應SQL模板中的第幾個問號,其他參數和使用條件與[:name]情況相同 $stmt->bindParam(1,$username,PDO::PARAM_STR); $stmt->bindParam(2,$password,PDO::PARAM_STR); $stmt->bindParam(3,$email); $username='imooc'; $password='imooc'; $email='[email protected]'; $stmt->execute();查看全部
-
$username=$_POST['username']; $password=$_POST['password']; 使用命名(:name)參數來準備SQL語句 $sql="select * from user where username=:username and password=:password"; $stmt=$pdo->prepare($sql); $stmt->execute(array(":username"=>$username,":password"=>$password)); 使用問號(?)參數來準備SQL語句 $sql="select * from user where username=? and password=?"; $stmt=$pdo->prepare($sql); $stmt->execute(array($username,$password));查看全部
-
通過quote()返回帶引號的字符串,過濾字符串中的特殊字符,防止sql注入。 不推薦使用quote()防止sql注入,推薦使用prepare()和execute()預處理防止sql注入。查看全部
舉報
0/150
提交
取消