A. 求個好用的php mysql封裝類

<?php


classMMysql{

protectedstatic$_dbh=null;//靜態屬性,所有資料庫實例共用,避免重復連接資料庫
protected$_dbType='mysql';
protected$_pconnect=true;//是否使用長連接
protected$_host='localhost';
protected$_port=3306;
protected$_user='root';
protected$_pass='root';
protected$_dbName=null;//資料庫名
protected$_sql=false;//最後一條sql語句
protected$_where='';
protected$_order='';
protected$_limit='';
protected$_field='*';
protected$_clear=0;//狀態,0表示查詢條件干凈,1表示查詢條件污染
protected$_trans=0;//事務指令數

/**
*初始化類
*@paramarray$conf資料庫配置
*/
publicfunction__construct(array$conf){
class_exists('PDO')ordie("PDO:classnotexists.");
$this->_host=$conf['host'];
$this->_port=$conf['port'];
$this->_user=$conf['user'];
$this->_pass=$conf['passwd'];
$this->_dbName=$conf['dbname'];
//連接資料庫
if(is_null(self::$_dbh)){
$this->_connect();
}
}

/**
*連接資料庫的方法
*/
protectedfunction_connect(){
$dsn=$this->_dbType.':host='.$this->_host.';port='.$this->_port.';dbname='.$this->_dbName;
$options=$this->_pconnect?array(PDO::ATTR_PERSISTENT=>true):array();
try{
$dbh=newPDO($dsn,$this->_user,$this->_pass,$options);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//設置如果sql語句執行錯誤則拋出異常,事務會自動回滾
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);//禁用preparedstatements的模擬效果(防SQL注入)
}catch(PDOException$e){
die('Connectionfailed:'.$e->getMessage());
}
$dbh->exec('SETNAMESutf8');
self::$_dbh=$dbh;
}

/**
*欄位和表名添加`符號
*保證指令中使用關鍵字不出錯針對mysql
*@paramstring$value
*@returnstring
*/
protectedfunction_addChar($value){
if('*'==$value||false!==strpos($value,'(')||false!==strpos($value,'.')||false!==strpos($value,'`')){
//如果包含*或者使用了sql方法則不作處理
}elseif(false===strpos($value,'`')){
$value='`'.trim($value).'`';
}
return$value;
}

/**
*取得數據表的欄位信息
*@paramstring$tbName表名
*@returnarray
*/
protectedfunction_tbFields($tbName){
$sql='SELECTCOLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME="'.$tbName.'"ANDTABLE_SCHEMA="'.$this->_dbName.'"';
$stmt=self::$_dbh->prepare($sql);
$stmt->execute();
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
$ret=array();
foreach($resultas$key=>$value){
$ret[$value['COLUMN_NAME']]=1;
}
return$ret;
}

/**
*過濾並格式化數據表欄位
*@paramstring$tbName數據表名
*@paramarray$dataPOST提交數據
*@returnarray$newdata
*/
protectedfunction_dataFormat($tbName,$data){
if(!is_array($data))returnarray();
$table_column=$this->_tbFields($tbName);
$ret=array();
foreach($dataas$key=>$val){
if(!is_scalar($val))continue;//值不是標量則跳過
if(array_key_exists($key,$table_column)){
$key=$this->_addChar($key);
if(is_int($val)){
$val=intval($val);
}elseif(is_float($val)){
$val=floatval($val);
}elseif(preg_match('/^(w*(+|-|*|/)?w*)$/i',$val)){
//支持在欄位的值裡面直接使用其它欄位,例如(score+1)(name)必須包含括弧
$val=$val;
}elseif(is_string($val)){
$val='"'.addslashes($val).'"';
}
$ret[$key]=$val;
}
}
return$ret;
}

/**
*執行查詢主要針對SELECT,SHOW等指令
*@paramstring$sqlsql指令
*@returnmixed
*/
protectedfunction_doQuery($sql=''){
$this->_sql=$sql;
$pdostmt=self::$_dbh->prepare($this->_sql);//prepare或者query返回一個PDOStatement
$pdostmt->execute();
$result=$pdostmt->fetchAll(PDO::FETCH_ASSOC);
return$result;
}

/**
*執行語句針對INSERT,UPDATE以及DELETE,exec結果返回受影響的行數
*@paramstring$sqlsql指令
*@returninteger
*/
protectedfunction_doExec($sql=''){
$this->_sql=$sql;
returnself::$_dbh->exec($this->_sql);
}

/**
*執行sql語句,自動判斷進行查詢或者執行操作
*@paramstring$sqlSQL指令
*@returnmixed
*/
publicfunctiondoSql($sql=''){
$queryIps='INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOADDATA|SELECT.*INTO|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK';
if(preg_match('/^s*"?('.$queryIps.')s+/i',$sql)){
return$this->_doExec($sql);
}
else{
//查詢操作
return$this->_doQuery($sql);
}
}

/**
*獲取最近一次查詢的sql語句
*@returnString執行的SQL
*/
publicfunctiongetLastSql(){
return$this->_sql;
}

/**
*插入方法
*@paramstring$tbName操作的數據表名
*@paramarray$data欄位-值的一維數組
*@returnint受影響的行數
*/
publicfunctioninsert($tbName,array$data){
$data=$this->_dataFormat($tbName,$data);
if(!$data)return;
$sql="insertinto".$tbName."(".implode(',',array_keys($data)).")values(".implode(',',array_values($data)).")";
return$this->_doExec($sql);
}

/**
*刪除方法
*@paramstring$tbName操作的數據表名
*@returnint受影響的行數
*/
publicfunctiondelete($tbName){
//安全考慮,阻止全表刪除
if(!trim($this->_where))returnfalse;
$sql="deletefrom".$tbName."".$this->_where;
$this->_clear=1;
$this->_clear();
return$this->_doExec($sql);
}

/**
*更新函數
*@paramstring$tbName操作的數據表名
*@paramarray$data參數數組
*@returnint受影響的行數
*/
publicfunctionupdate($tbName,array$data){
//安全考慮,阻止全表更新
if(!trim($this->_where))returnfalse;
$data=$this->_dataFormat($tbName,$data);
if(!$data)return;
$valArr='';
foreach($dataas$k=>$v){
$valArr[]=$k.'='.$v;
}
$valStr=implode(',',$valArr);
$sql="update".trim($tbName)."set".trim($valStr)."".trim($this->_where);
return$this->_doExec($sql);
}

/**
*查詢函數
*@paramstring$tbName操作的數據表名
*@returnarray結果集
*/
publicfunctionselect($tbName=''){
$sql="select".trim($this->_field)."from".$tbName."".trim($this->_where)."".trim($this->_order)."".trim($this->_limit);
$this->_clear=1;
$this->_clear();
return$this->_doQuery(trim($sql));
}

/**
*@parammixed$option組合條件的二維數組,例:$option['field1']=array(1,'=>','or')
*@return$this
*/
publicfunctionwhere($option){
if($this->_clear>0)$this->_clear();
$this->_where='where';
$logic='and';
if(is_string($option)){
$this->_where.=$option;
}
elseif(is_array($option)){
foreach($optionas$k=>$v){
if(is_array($v)){
$relative=isset($v[1])?$v[1]:'=';
$logic=isset($v[2])?$v[2]:'and';
$condition='('.$this->_addChar($k).''.$relative.''.$v[0].')';
}
else{
$logic='and';
$condition='('.$this->_addChar($k).'='.$v.')';
}
$this->_where.=isset($mark)?$logic.$condition:$condition;
$mark=1;
}
}
return$this;
}

/**
*設置排序
*@parammixed$option排序條件數組例:array('sort'=>'desc')
*@return$this
*/
publicfunctionorder($option){
if($this->_clear>0)$this->_clear();
$this->_order='orderby';
if(is_string($option)){
$this->_order.=$option;
}
elseif(is_array($option)){
foreach($optionas$k=>$v){
$order=$this->_addChar($k).''.$v;
$this->_order.=isset($mark)?','.$order:$order;
$mark=1;
}
}
return$this;
}

/**
*設置查詢行數及頁數
*@paramint$pagepageSize不為空時為頁數,否則為行數
*@paramint$pageSize為空則函數設定取出行數,不為空則設定取出行數及頁數
*@return$this
*/
publicfunctionlimit($page,$pageSize=null){
if($this->_clear>0)$this->_clear();
if($pageSize===null){
$this->_limit="limit".$page;
}
else{
$pageval=intval(($page-1)*$pageSize);
$this->_limit="limit".$pageval.",".$pageSize;
}
return$this;
}

/**
*設置查詢欄位
*@parammixed$field欄位數組
*@return$this
*/
publicfunctionfield($field){
if($this->_clear>0)$this->_clear();
if(is_string($field)){
$field=explode(',',$field);
}
$nField=array_map(array($this,'_addChar'),$field);
$this->_field=implode(',',$nField);
return$this;
}

/**
*清理標記函數
*/
protectedfunction_clear(){
$this->_where='';
$this->_order='';
$this->_limit='';
$this->_field='*';
$this->_clear=0;
}

/**
*手動清理標記
*@return$this
*/
publicfunctionclearKey(){
$this->_clear();
return$this;
}

/**
*啟動事務
*@returnvoid
*/
publicfunctionstartTrans(){
//數據rollback支持
if($this->_trans==0)self::$_dbh->beginTransaction();
$this->_trans++;
return;
}

/**
*用於非自動提交狀態下面的查詢提交
*@returnboolen
*/
publicfunctioncommit(){
$result=true;
if($this->_trans>0){
$result=self::$_dbh->commit();
$this->_trans=0;
}
return$result;
}

/**
*事務回滾
*@returnboolen
*/
publicfunctionrollback(){
$result=true;
if($this->_trans>0){
$result=self::$_dbh->rollback();
$this->_trans=0;
}
return$result;
}

/**
*關閉連接
*PHP在腳本結束時會自動關閉連接。
*/
publicfunctionclose(){
if(!is_null(self::$_dbh))self::$_dbh=null;
}

}

B. php實現mysql封裝類示例

php封裝mysql類
復制代碼
代碼如下:
<?php
class
Mysql
{
private
$host;
private
$user;
private
$pwd;
private
$dbName;
private
$charset;
private
$conn
=
null;
public
function
__construct()
{
$this->host
=
'localhost';
$this->user
=
'root';
$this->pwd
=
'root';
$this->dbName
=
'test';
$this->connect($this->host,$this->user,$this->pwd);
$this->switchDb($this->dbName);
$this->setChar($this->charset);
}
//負責鏈接
private
function
connect($h,$u,$p)
{
$conn
=
mysql_connect($h,$u,$p);
$this->conn
=
$conn;
}
//負責切換資料庫
public
function
switchDb($db)
{
$sql
=
'use'
.
$db;
$this->query($sql);
}
//負責設置字元集
public
function
setChar($char)
{
$sql
=
'set
names'
.
$char;
$this->query($sql);
}
//負責發送sql查詢
public
function
query($sql)
{
return
mysql_query($sql,$this->conn);
}
//負責獲取多行多列的select結果
public
function
getAll($sql)
{
$list
=
array();
$rs
=
$this->query($sql);
if
(!$rs)
{
return
false;
}
while
($row
=
mysql_fetch_assoc($rs))
{
$list[]
=
$row;
}
return
$list;
}
public
function
getRow($sql)
{
$rs
=
$this->query($sql);
if(!$rs)
{
return
false;
}
return
mysql_fetch_assoc($rs);
}
public
function
getOne($sql)
{
$rs
=
$this->query($sql);
if
(!$rs)
{
return
false;
}
return
mysql_fetch_assoc($rs);
return
$row[0];
}
public
function
close()
{
mysql_close($this->conn);
}
}
echo
'<pre>';
$mysql
=
new
Mysql();
print_r($mysql);
$sql
=
"insert
into
stu
values
(4,'wangwu','99998')";
if($mysql->query($sql)){
echo
"query成功";
}else
{
echo
"失敗";
}
echo
"<br
/>";
$sql
=
"select
*
from
stu";
$arr
=
$mysql->getAll($sql);
print_r($arr);
?>

C. PHP如何封裝方法

//下面定義一個方法,這個方法很簡單,就是處理2個數的相加問題
functionadd($number1,$number2){
$sum=$number1+$number2;
echo$sum;
}
//我們來調用add()方法
add(1,2);
/**
說明版:
function這個關鍵字就是聲權明方法的。在這個關鍵字後面的add就是方法的名稱,括弧中的是參數。
也可以沒有參數的。大括弧內是方法體。裡面是該方法的邏輯。
下面的add(1,2)就是調用add這個方法。如果沒有調用方法將不會被執行的。
*/
//定義一個帶有返回值的方法
functionre($n1,$n2){
$sum=$n1+$n2;
return$sum;
}
//調用有返回值的方法,調用這個方法,值是5。
echore(2,3);


D. 什麼是php中的封裝

封裝是php面向對象的其中一個特性,將多個可重復使用的函數封裝到一專個類裡面。在使用時直接實屬例化該類的某一個方法,獲得需要的數據

如果是私有的方法和屬性值,外部無法訪問,具有一定的保護作用。

面向對象之封裝 例子
class A{
public $name = '老王';
// protected $name = '老王';
//private $name = '老王';

//自己訪問
public function saya(){
return $this->name;
}
}
//實例化對象
$b = new A;

//public:外部、家族、自己都可以訪問
//protected:家族和自己都可以訪問,外部無法訪問
//private:自己可以訪問,外部和家族都無法訪問
echo '外部訪問:'.$b->name.'<br>'; //如果是私有的,訪問不了
echo '家族訪問:'.$b->sayb().'<br>';
echo '自己訪問:'.$b->saya().'<br>';

E. php封裝一個class類實現mysql改的方法

/**
* 執行更新記錄操作
* @param $data 要更新的數據內容,參數可以為數組也可以為字元串,建議數組。
* 為數組時數組key為欄位值,數組值為數據取值
* 為字元串時[例:`name`='phpcms',`hits`=`hits`+1]。
* 為數組時[例: array('name'=>'phpcms','password'=>'123456')]
* 數組可使用array('name'=>'+=1', 'base'=>'-=1');程序會自動解析為`name` = `name` + 1, `base` = `base` - 1
* @param $table 數據表
* @param $where 更新數據時的條件
* @return boolean
*/
public function update($data, $table, $where = '') {
if($table == '' or $where == '') {
return false;
}

$where = ' WHERE '.$where;
$field = '';
if(is_string($data) && $data != '') {
$field = $data;
} elseif (is_array($data) && count($data) > 0) {
$fields = array();
foreach($data as $k=>$v) {
switch (substr($v, 0, 2)) {
case '+=':
$v = substr($v,2);
if (is_numeric($v)) {
$fields[] = $this->add_special_char($k).'='.$this->add_special_char($k).'+'.$this->escape_string($v, '', false);
} else {
continue;
}

break;
case '-=':
$v = substr($v,2);
if (is_numeric($v)) {
$fields[] = $this->add_special_char($k).'='.$this->add_special_char($k).'-'.$this->escape_string($v, '', false);
} else {
continue;
}
break;
default:
$fields[] = $this->add_special_char($k).'='.$this->escape_string($v);
}
}
$field = implode(',', $fields);
} else {
return false;
}

$sql = 'UPDATE `'.$this->config['database'].'`.`'.$table.'` SET '.$field.$where;
return $this->execute($sql);
}

/**
* 資料庫查詢執行方法
* @param $sql 要執行的sql語句
* @return 查詢資源句柄
*/
private function execute($sql) {
if(!is_resource($this->link)) {
$this->connect();
}

$this->lastqueryid = mysql_query($sql, $this->link) or $this->halt(mysql_error(), $sql);

$this->querycount++;
return $this->lastqueryid;
}

F. php封裝一個class類實現mysql資料庫的增刪該查

class sqlHelper{
public $conn;
public $dbname="資料庫名稱";
public $username="資料庫用戶名";
public $password="資料庫密碼";
public $host="localhost";
//連接資料庫
public function __construct(){
$this->conn=mysql_connect($this->host,$this->username,$this->password);
if(!$this->conn){
die("連接失敗".mysql_error());
}
mysql_select_db($this->dbname,$this->conn);
}
//執行查詢語句
public function execute_dql($sql){
$res=mysql_query($sql,$this->conn);
return $res;
}
//執行增填改語句
public function execute_dml($sql){
$b=mysql_query($sql,$this->conn);
if(!$b){
return 3;
}else{
if(mysql_affected_rows($this->conn)){
return 1;//表示OK
}else{
return 2;//表示沒有行收到影響
}
}
}
}

G. php 封裝是什麼啊

這個就是語法格式
$this 就代表著當前的類
如果想用類的屬性就 $this->name 這么寫

H. PHP中,類的封裝,調用問題

<?
class Page{
function 分頁函數(參數){
$perNumber = 2;
$page = $_GET['page'];
$count = mysql_query("select count(*) from people");
$rs = mysql_fetch_array($count);
$totalNumber = $rs[0];
$totalPage = ceil($totalNumber/$perNumber);
if(!isset($page)){
$page = 1;
}
$startCount = ($page-1)*$perNumber;
$result = mysql_query("select * from people limit $startCount,$perNumber");
$num = mysql_numrows($result);

for($i=0;$i<$num;$i++){
$a = mysql_result($result,$i,"id");
$b = mysql_result($result,$i,"name");
$c = mysql_result($result,$i,"age");
echo "<br />".$a."<br />".$b."<br />".$c."<br />";
}

}
}

?>

I. 現在PHP編程的時候一般是把一個功能的實現封裝成一個類還是封裝成一個方法

單一功能的實現封裝成方法比較方便,比如處理時間(現在回復貼子的時間與上次回復的時間間專隔這個功能封屬裝成一個方法便可以方便在每個需要的地方調用)。封裝成類多數用於模塊這種實現多功能的地方。如處理資料庫:可以把與資料庫有關的功能封裝成類,在這個類中實現資料庫的連接、查詢,添加,刪除、修改資料庫等方法。還有處理圖像,模板處理等等這些模塊都可以封裝成類有助於代碼的可維護性,增強代碼的重用性等好處就不多說了