當前位置:首頁 » 編程語言 » phpdbclass

phpdbclass

發布時間: 2022-07-16 13:54:25

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

<?php
class db{
private $db;
const MYSQL_OPT_READ_TIMEOUT = 11;
const MYSQL_OPT_WRITE_TIMEOUT = 12;
private $tbl_name;
private $where;
private $sort;
private $fields;
private $limit;
public static $_instance = null;
function __construct(){
$cfg = loadConfig('db');
$db = mysqli_init();
$db->options(self::MYSQL_OPT_READ_TIMEOUT, 3);
$db->options(self::MYSQL_OPT_WRITE_TIMEOUT, 1);
@$db->real_connect($cfg['host'],$cfg['user'],$cfg['pwd'],$cfg['db']);
if ($db->connect_error) {
$this->crash($db->errno,$db->error);
}
$db->set_charset("utf8");
$this->db = $db;
//echo $this->db->stat;
}
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
private function __clone() {} //覆蓋__clone()方法,禁止克隆
public function find($conditions = null){
if($conditions) $this->where($conditions);
return $this->getArray($this->buildSql(),1);
}
public function findAll($conditions = null){
if($conditions) $this->where($conditions);
return $this->getArray($this->buildSql());
}
//表
public function t($table){ $this->tbl_name = $table; return $this;}
//條件
public function where($conditions){
$where = '';
if(is_array($conditions)){
$join = array();
foreach( $conditions as $key => $condition ){
$condition = $this->db->real_escape_string($condition);
$join[] = "`{$key}` = '{$condition}'";
}
$where = "WHERE ".join(" AND ",$join);
}else{
if(null != $conditions) $where = "WHERE ".$conditions;
}
$this->where = $where;
return $this;
}
//排序
public function sort($sort){
if(null != $sort) $sort = "ORDER BY {$sort}";
$this->sort = $sort;
return $this;
}
//欄位
public function fields($fields){ $this->fields = $fields; return $this; }
public function limit($limit){$this->limit = $limit; return $this;}
private function buildSql(){
$this->fields = empty($this->fields) ? "*" : $this->fields;
$sql = "SELECT {$this->fields} FROM {$this->tbl_name} {$this->where} {$this->sort}";
accessLog('db_access',$sql);
if(null != $this->limit)$sql .= " limit {$this->limit}";
return $sql;
}
/**
* 返回查詢數據
* @param $sql
* @param bool $hasOne
* @return array|bool|mixed
*/
private function getArray($sql,$hasOne = false){
if($this->db->real_query($sql) ){
if ($result = $this->db->use_result()) {
$row = array();
if($hasOne){
$row = $result->fetch_assoc();
}else{
while($d = $result->fetch_assoc()) $row[] = $d;
}
$result->close();
$this->fields = "*";
return $row;
}else{
return false;
}
}else{
if($this->db->error){
$this->crash($this->db->errno,$this->db->error,$sql);
}
}
}
public function findSql($sql,$hasOne = false){
accessLog('db_access',$sql);
if($this->db->real_query($sql) ){
if ($result = $this->db->use_result()) {
$row = array();
if($hasOne){
$row = $result->fetch_assoc();
}else{
while($d = $result->fetch_assoc()) $row[] = $d;
}
$result->close();
$this->fields = "*";
return $row;
}else{
return false;
}
}else{
if($this->db->error){
$this->crash($this->db->errno,$this->db->error,$sql);
}
}
}
public function create($row){
if(!is_array($row))return FALSE;
$row = $this->prepera_format($row);
if(empty($row))return FALSE;
foreach($row as $key => $value){
$cols[] = '`'.$key.'`';
$vals[] = "'".$this->db->real_escape_string($value)."'";
}
$col = implode(',', $cols);
$val = implode(',', $vals);
$sql = "INSERT INTO `{$this->tbl_name}` ({$col}) VALUES ({$val})";
accessLog('db_access',$sql);
if( FALSE != $this->db->query($sql) ){ // 獲取當前新增的ID
if($this->db->insert_id){
return $this->db->insert_id;
}
if($this->db->affected_rows){
return true;
}
}
return FALSE;
}
//直接執行sql
public function runSql($sql){
accessLog('db_access',$sql);
if( FALSE != $this->db->query($sql) ){ // 獲取當前新增的ID
return true;
}else{
return false;
}
}
public function update($row){
$where = "";
$row = $this->prepera_format($row);
if(empty($row))return FALSE;
foreach($row as $key => $value){
$value = $this->db->real_escape_string($value);
$vals[] = "`{$key}` = '{$value}'";
}
$values = join(", ",$vals);
$sql = "UPDATE {$this->tbl_name} SET {$values} {$this->where}";
accessLog('db_access',$sql);
if( FALSE != $this->db->query($sql) ){ // 獲取當前新增的ID
if( $this->db->affected_rows){
return true;
}
}
return false;
}
function delete(){
$sql = "DELETE FROM {$this->tbl_name} {$this->where}";
if( FALSE != $this->db->query($sql) ){ // 獲取當前新增的ID
if( $this->db->affected_rows){
return true;
}
}
return FALSE;
}
private function prepera_format($rows){
$columns = $this->getArray("DESCRIBE {$this->tbl_name}");
$newcol = array();
foreach( $columns as $col ){
$newcol[$col['Field']] = $col['Field'];
}
return array_intersect_key($rows,$newcol);
}
//崩潰信息
private function crash($number,$message,$sql=''){
$msg = 'Db Error '.$number.':'.$message ;
if(empty($sql)){
echo t('db_crash');
}else{
$msg .= " SQL:".$sql;
echo t('db_query_err');
}
accessLog('db_error',$msg);
exit;
}
}

❷ php db.class怎麼寫

<?php
class Db{
public $host;
public $username;
public $password;
public $database;
public $conn;
public $table;
public $sql;
public $field = '*';

function __construct($host,$username,$password,$database){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $database;
$this->connect();
}

function connect(){

$this->conn = new mysqli($this->host, $this->username, $this->password,$this->database);

if ($this->conn->connect_error) {
die("連接失敗: " . $this->conn->connect_error);
}
}

function M($table){
$this->table = $table;
return $this;
}

function where($array){
$this->sql = '';
$sql = 'where ';
$one = '';
if($array){
if(is_array($array)){
foreach($array as $key=>$vo){
$one .= '`'.$key.'` = "'.$vo.'" and';
}
$one = trim($one,'and');
$sql .= $one;
$this->sql = $sql;
}else{
$sql .= $array;
$this->sql = $sql;

}
}
return $this;
}

function add($array){
$sql = 'insert into `'.$this->table.'` (';
$one = '';
$two = '';
if($array){
if(is_array($array)){
foreach($array as $key=>$vo){
$one .= '`'.$key.'` ,';
$two .= '"'.$vo.'",';
}
$one = trim($one,',');
$two = trim($two,',');
if($one && $two){
$sql .= $one.') values ('.$two.')';
$this->sql = $sql;
$r = $this->conn->query($this->sql);
if($r){
return mysqli_insert_id($this->conn);
}else{
return false;
}
}
}else{
exit('非數組');
}
}else{
exit('數組為空');
}
}

function select(){
$array = '';
$sql = 'select '.$this->field.' from `'.$this->table.'`'.$this->sql;
$result = $this->conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$array[] = $row;
}
}
return $array;
}
function find(){
$row = '';
$sql = 'select '.$this->field.' from `'.$this->table.'`'.$this->sql.'limit 1';
$result = $this->conn->query($sql);
if($result){
$row = $result->fetch_assoc();
}

return $row;
}
function edit($array){
$sql = 'update `'.$this->table.'` set ';
$one = '';
if($array){
if(is_array($array)){
foreach($array as $key=>$vo){
$one .= '`'.$key.'` = "'.$vo.'",';
}
$one = trim($one,',');
$sql .= $one.' '.$this->sql;
}else{
$sql .= $array.' '.$this->sql;
}
$r = $this->conn->query($sql);
if($r){
return true;
}else{
return false;
}
}else{
exit('未接收到參數');
}
}

function del(){
$sql = 'delete from `'.$this->table.'` ';
$sql .= $this->sql;
$r = $this->conn->query($sql);
if($r){
return true;
}else{
return false;
}
}
function order($data){
$this->sql = $this->sql.' order by '.$data;
return $this;
}

function limit($data){
$this->sql = $this->sql.' limit '.$data;
return $this;
}
function field($data){
$this->field = $data;
return $this;
}

}

?>

❸ 新手求助,有Db.class.php,Class Db'not found

有 Db.class.php ,在實際使用時,還需要 include 文件,而且源代碼中要確實定義了 class db。

❹ 怎麼才能寫能連接資料庫的php 我的資料庫名叫classdb 表名叫test user是用戶名 password是密碼 下是代碼

<?php
//連接資料庫
define('HOST','localhost');
define('USER','root');
define('PWD','');
define('DB','juyi_data');//庫名
define('CHAR','utf8');//字元集
define('PRE','');//表前綴
$link=@mysql_connect(HOST,USER,PWD);
if(mysql_errno()){
exit(mysql_error());
}
mysql_select_db(DB);
mysql_set_charset(CHAR);
$list=query('select*fromtestwhereuser='.$_POST['username'].'andpassword='.$_POST['pwd']);
var_mp($list);
functionquery($sql=''){
//執行SQL
$result=mysql_query($sql);
if($result&&mysql_num_rows($result)>0){
while($row=mysql_fetch_assoc($result)){
$list[]=$row;
}
mysql_free_result($result);
return$list;
}
returnfalse;
}

functionexecute($sql=''){
$result=mysql_query($sql);
if($result&&mysql_affected_rows()>0){
if($id=mysql_insert_id()){
return$id;
}
returntrue;
}
returnfalse;
}

❺ 為什麼在做框架架構的時候,會寫config.inc.php,這個為什麼要寫inc,還有db.class.php,class是做什麼用的

僅僅是這個框架所約定的一個是對配置文件的命名規范,一個是對類文件的命名規范而已,因為可能框架裡面已經寫死配置文件的名稱只能是 config.inc.php ,同理,類文件只能是 類名.class.php這樣了,如果你不照這些規范來,你那框架肯定會報錯運行不了. 其實等你搞通了PHP,你完全可以自己寫一套框架,按自己的習慣來命名這些東西的.

❻ php 如何輸出DB類上所有SQL語句,頁面上的所有 有關mysql 連接,語句 等信息

class DB_MYSQL
{
/*
* @_conf Array: [hostname],[username],[password],[dataname],[dbtype],[charset],[debug]
*/
var $_conf;
var $_dblink; //mysql connect
var $_dberr =0;
var $_sqlnum=0; //SQL query times
var $_sql='';
var $pageinfo =array();
var $pageSize =20; //=0: all; >0 page size
var $pageOrder=0;
var $stripSet =0;
function DB_MYSQL($db_config=''){
if(empty($db_config)){
global $db_conf;
$db_config=$db_conf[0];
}
$this->_conf=$db_config;
}
function conn()
{
$this->_dblink=@mysql_connect($this->_conf['hostname'],$this->_conf['username'], $this->_conf['password'])
OR $this->debug("mysql_connect error:".str_replace($this->_conf['username'].'@','',mysql_error($this->_dblink)));
if($this->_dblink)
{
if (isset($this->_conf['charset']) and strlen($this->_conf['charset'])>0)
{
@mysql_query("SET character_set_connection=".$this->_conf['charset'].", character_set_results=".$this->_conf['charset'].", character_set_client=binary", $this->_dblink);
}
$res=@mysql_select_db($this->_conf['dataname'],$this->_dblink)
OR $this->debug("mysql_select_db error:".mysql_error($this->_dblink));
if ($res) return true;
}
$this->_dberr=1;
return false;
}
function select_db($NewDB){
$this->_conf['dataname']=$NewDB;
if(empty($this->_dblink)){
return $this->conn();
}
$res=@mysql_select_db($this->_conf['dataname'])
OR $this->debug("mysql_select_db error:".mysql_error($this->_dblink));
if ($res) return true;
$this->_dberr=1;
return false;
}
/*
* @array query ($fetchType>0)
* @result query ($fetchType=0)
*/
function query($str,$fetchType=0,$file_rows='')
{
if (strlen($str)<1){
return false;
}
if(!$this->_dblink){
$this->conn();
}
else if (!mysql_ping($this->_dblink))
{
$this->close();
$this->conn();
}
$SQL=substr($str,0,18).'..';
if ($this->_conf['debug'] > 2)
{
$SQL=$str;
}
if(!empty($file_rows))
{
$SQL=$SQL.'<BR>'.$file_rows;
}
$this->_sql=$str;
$result=@mysql_query($str,$this->_dblink) OR $this->debug("mysql_query error:".mysql_error(),$SQL);
$this->_sqlnum=$this->_sqlnum+1;
if ($result)
{
if ($fetchType==1)
{
$arr=@mysql_fetch_array($result,1);
$this->check_query_quote($arr);
$this->free($result);
return $arr;
}
else if ($fetchType==2)
{
$arr = array();
while ($row = mysql_fetch_array($result,1))
{
$this->check_query_quote($row);
$arr[] = $row;
}
$this->free($result);
return $arr;
}
return $result;
}
else if ($fetchType>1) # NEW 2010-7-28
{
return array();
}
return false;
}//END sql
/*
* @array query_page
*/
function query_page(&$page,$Field,$Table,$Where='',$Order='',$Group='')
{
$page=intval($page);
$psize=abs($this->pageSize);
$this->_table=$Table;
if($psize<0 or $psize>300) $psize=20;
$sql="SELECT count(*) as allnum FROM $Table $Where";
if (strlen($Group)>0) {
$this->_sql="$sql $Group";
$result=$this->query("$sql $Group");
$rowsnum=$this->num_rows($result);
}
else{
$this->_sql=$sql;
$row=$this->query($sql,1);
$rowsnum=$row['allnum']+0;
}
if($rowsnum==0){
$page=0;
$this->pageinfo=Array('page'=>0,'pagenum'=>0,'rowsnum'=>0);
return array();
}
$pagenum=$psize<1 ? 1 : ceil($rowsnum/$psize);
$limit='';
if($psize==0){
$page=1;
$pagenum=1;
}
else
{
if($page > $pagenum or $page < 1) $page=1;
if($pagenum > 1){
$limit='limit '.(($page-1)*$psize).','.$psize;
}
}
$this->pageinfo['page'] =$page;
$this->pageinfo['pagenum'] =$pagenum;
$this->pageinfo['rowsnum'] =$rowsnum;
$sql ="SELECT $Field FROM $Table $Where $Group $Order $limit";
$this->_sql=$sql;
return $this->query($sql,2);
}
/*
* @array fetch_array
* @type: 1 MYSQL_ASSOC 2 MYSQL_NUM #3 MYSQL_BOTH
*/
function fetch_array(&$result,$type=1)
{
$arr=Array();
if (!$result) return $arr;
while ($row = @mysql_fetch_array($result,$type))
{
$this->check_query_quote($row);
return $row;
}
$this->free($result);
return false;
}
function fetch_subarr(&$result,$keyset='',$valset='')
{
$arr=Array();
if (!$result) return $arr;
if (empty($keyset))
{
return $arr;
}
while ($row = @mysql_fetch_array($result,1))
{
$this->check_query_quote($row);
if (!empty($keyset) and isset($row[$keyset]))
{
$tag=$row[$keyset];
$arr[$tag]=empty($valset) ? $row : $row[$valset];
}
}
$this->free($result);
return $arr;
}
function check_query_quote(&$val)
{
if($this->stripSet) $this->stripVar($val);
}
function stripVar(&$val)
{
if(is_array($val)){
foreach($val as $key => $v)
{
$this->stripVar($val[$key]);
}
}
else if(is_string($val)){
$val=StripSlashes($val);
}
}
function num_rows($result){
return @mysql_num_rows($result);
}
function affected_rows()
{
return @mysql_affected_rows($this->_dblink);
}
function data_seek(&$result,$row_num=0){
return @mysql_data_seek($result,$row_num);
}
function free(&$result){
return @mysql_free_result($result);
}
function last_id(){
$id=@mysql_insert_id($this->_dblink);
return intval($id);
}
function err_code()
{
return @mysql_errno($this->_dblink);
}
function err_msg()
{
return mysql_error($this->_dblink);
}
function close(){
$result = @mysql_close($this->_dblink);
$this->_dblink=0;
}
/* NEW 2010-8-15 */
function getsql($val,$type=0)
{
if($type==1) {
$g='';
if(substr($val,0,1)=='-') $g='-';
$val=preg_replace('/\D/','',$val);
if(strlen($val)==0) $val=0;
return $g.$val;
}
else if($type==2) return doubleval($val);
else if($type==3) return $val;
else{
if ($this->_dblink) return "'" . mysql_real_escape_string($val) . "'";
else return "'" . mysql_escape_string($val) . "'";
}
}
function getstr($val,$type=0) {
return $this->getsql($val,$type);
}
function debug($string,$SQL='')
{
$debug=$this->_conf['debug'];
if ($debug==4) {
die($string.'<HR>'.$SQL);
}
else if ($debug==3) {
print($string.'<HR>'.$SQL);
}
else if ($debug==2) {
print('<!--'.$string.'<HR>'.$SQL.'-->');
}
else if ($debug==1) {
//$code=intval($this->err_code());
return 0;
}
return 0;
}
}

❼ thinkphp的db類

呵呵,這個簡單。
因為,雖然Db.class.php中沒有query()函數,但是繼承它的『Driver』下的所有資料庫驅動類中都定義了query()函數,如:DbMysql.class.php中就定義了public function query($str)。
PHP中是允許父類調用子類中的函數的。

我自己寫程序的時候也經常利用這個特性,結合構造函數,大大提高了程序的靈活性。
歡迎一起交流PHP技術。

❽ 如何實現thinkphp中Db類的方法調用風格

我們先來看下官網對listen的說明:如果開啟資料庫的調試模式的話,你可以對資料庫執行的任何SQL操作進行監聽。這無疑很方便我們進行增刪改查的調試,以及通過執行的時間進行有效的sql優化,

友情提示:資料庫監聽要寫在執行sql語句的前面,因為只有在調用Db::listen之後的SQL語句才會被監聽,調用之前的語句不會被監聽。至於為什麼我們後面講!

使用如下方法:

123456Db::listen(function($sql,$time,$explain){//記錄SQLecho$sql.'['.$time.'s]';//查看性能分析結果mp($explain);});

有很多小夥伴疑問該方法應該放在哪裡?使用之後為什麼沒有效果,很可能就是提示上所說的那樣了,那麼接下來我們簡單分析一下這個方法!

1、從Db::listen(),可以看出listen是Db中的一個靜態方法,那麼我們就去找db類

2、從Db類中沒有找到該方法,但是我們從use thinkdbConnection可以看出,引入了Connection類,我們在這個類找一下這個方法!

12345678910/***監聽SQL執行*@accesspublic*@paramcallable$callback回調方法*@returnvoid*/publicfunctionlisten($callback){self::$event[]=$callback;}

3、event 保存我們傳入的回調方法

4、在看下面這2個方法

0414243444546/***資料庫調試記錄當前SQL及分析性能*@accessprotected*@paramboolean$start調試開始標記true開始false結束*@paramstring$sql執行的SQL語句留空自動獲取*@returnvoid*/protectedfunctiondebug($start,$sql=''){if(!empty($this->config['debug'])){//開啟資料庫調試模式if($start){Debug::remark('queryStartTime','time');}else{//記錄操作結束時間Debug::remark('queryEndTime','time');$runtime=Debug::getRangeTime('queryStartTime','queryEndTime');$sql=$sql?:$this->getLastsql();$log=$sql.'[RunTime:'.$runtime.'s]';$result=[];//SQL性能分析if($this->config['sql_explain']&&0===stripos(trim($sql),'select')){$result=$this->getExplain($sql);}//SQL監聽$this->trigger($sql,$runtime,$result);}}}protectedfunctiontrigger($sql,$runtime,$explain=[]){if(!empty(self::$event)){foreach(self::$eventas$callback){if(is_callable($callback)){call_user_func_array($callback,[$sql,$runtime,$explain]);}}}else{//未注冊監聽則記錄到日誌中Log::record('[SQL]'.$sql.'[RunTime:'.$runtime.'s]','sql');if(!empty($explain)){Log::record('[EXPLAIN:'.var_export($explain,true).']','sql');}}}

5、當我們執行了sql語句,就會觸發會調用debug方法將執行日誌寫入日誌文件中,同事調用trigger方法,如果我們最開始已經傳入了回調方法,也就是

1self::$event

不為空,(說明我們在執行sql語句之前就已經設置了監聽)我們將調用我們的回調函數!

1call_user_func_array

總結:在執行sql語句之前我們需要先設置監聽,這就是為什麼要把Db::listen()寫在執行sql語句的前面!

下面我們來看下實際的效果:

(){Db::listen(function($sql,$time,$explain){//記錄SQLecho$sql.'['.$time.'s]';//查看性能分析結果mp($explain);});//Getdatabasedoncolumns,執行sql語句foreach($channelas$v)$list[$v['id']]=GetData::getData('news',"channel_id={$v['id']}andstatus=2",'id,title,author,create_time,channel_id,file_path','order_bydesc','0,5');returnview('expo',['list'=>$list]);}

效果圖:

熱點內容
腳本微信取關 發布:2025-02-01 19:35:01 瀏覽:150
如何用雲伺服器部署svn 發布:2025-02-01 19:33:20 瀏覽:988
緩存迅雷 發布:2025-02-01 19:31:53 瀏覽:974
linux與unixshell編程指南 發布:2025-02-01 19:25:03 瀏覽:939
護膚品資料庫 發布:2025-02-01 19:25:02 瀏覽:648
python接受json數據 發布:2025-02-01 19:24:24 瀏覽:943
修改網站資料庫 發布:2025-02-01 19:02:16 瀏覽:423
果粉不換安卓怎麼辦 發布:2025-02-01 18:57:21 瀏覽:796
網頁卡需要什麼配置 發布:2025-02-01 18:50:30 瀏覽:136
編程玩家 發布:2025-02-01 18:22:36 瀏覽:823