国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

php操作mysqli(示例代碼)

2020-03-22 16:24:25
字體:
來源:轉載
供稿:網友
?php
define("MYSQL_OPEN_LOGS",true);
html' target='_blank'>class mysqliHelp
{

private $db;

public function __construct()
{
//如果要查詢日志log的話,怎么辦

}

public function __get($name )
{
//echo "__GET:",$name;
if(in_array($name,array("db"),true))//或者isset($this- $name)
return $this- $name;
return null;

}
public function connect($host,$user,$pass,$db,$charSet='utf8',$force=false)
{

if($this- db && ($this- db instanceof mysqli) && !$force)
{
return ;
}
$this- db=new mysqli($host,$user,$pass,$db);
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
$this- db- set_charset($charSet);



}




//$dbname string
//返回值 如果成功則返回 TRUE,失敗則返回 FALSE。
function select_db ($dbname )
{
return $this- db- select_db($dbname);
}

//$query mysqli_result
//$resulttype int MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH. Defaults to MYSQLI_BOTH.
//返回值 Returns an array of strings that corresponds to the fetched row or NULL if there are no more rows in resultset.
function fetch_array(/*mysqli_result*/ $query, $resulttype = MYSQLI_ASSOC)
{
//var_dump(!null);
if(!$query || !($query instanceof mysqli_result))
return NULL;
return $query- fetch_array($resulttype);//
}

function data_seek($result,$offset)
{

return $result- data_seek($offset);

}



function fetch_assoc($query)
{

return $query- fetch_assoc();// 關聯數組
}

function fetch_row($query)
{
return $query- fetch_row();// 索引數組,數字0,1。eg。。。
}

function fetch_fields($query)
{
return $query- fetch_fields();
}

//$query string
//$resultmode int
//返回值 如果成功則返回 TRUE,失敗則返回 FALSE。 For SELECT, SHOW, DESCRIBE or EXPLAIN mysqli_query() will return a result object.
public function query($sql ,$resultmode=MYSQLI_STORE_RESULT )
{
if(MYSQL_OPEN_LOGS) {

$sqlstarttime = $sqlendttime = 0;

$mtime = explode(' ', microtime());
$sqlstarttime = $mtime[1]+ $mtime[0] ;


}

//真正查詢
$query=$this- db- query($sql,$resultmode);

if(MYSQL_OPEN_LOGS) {
// sleep(1);
$mtime = explode(' ', microtime());
$sqlendttime = $mtime[1] + $mtime[0] ;
$sqlQueryTime = number_format($sqlendttime - $sqlstarttime,6);
//dblogs($sql, $sqlQueryTime,1);
$explain = array();
$info = $this- db- info;
if($query && preg_match("/^(select )/i", $sql)) {
$explain = $this- fetch_array($this- db- query('EXPLAIN '.$sql), MYSQLI_ASSOC );
}
$GLOBALS['mysql_debug_query'][] = array('sql'= $sql, 'time'= $sqlQueryTime, 'info'= $info, 'explain'= $explain);
}


if(!$query)
{
$this- halt('MySQL Query Error', $sql);
}


return $query;

}

//返回值 mysqli_stmt對象
function prepare($sql)
{
return $this- db- prepare($sql);

}

function affected_rows() {


return $this- db- affected_rows;
}
function error()
{
return $this- db- error;

}
function errno()
{
return $this- db- errno;
}
//result 沒有

function num_rows($query)
{
return $query- num_rows;

}

//返回值 int The number of fields from a result set.
//也可以用另外一種方式 mysqliHelp- db- field_count返回。
function num_fields($query)
{
return $query- field_count;
}

function free_result($query)
{
//all methods are equivalent;
$query- free();
//$query- free_result();
//$query- close();
}

function insert_id()
{

if(($id = $this- db- insert_id) = 0)
{

return $id;
}else
{
$idArr=$this- fetch_array($this- query("SELECT last_insert_id() as id"));
return intval($idArr[0]);
}


//return ($idArr=$this- fetch_array($this- query("SELECT last_insert_id() as id")))[0]
//return ($id = $this- db-insert_id) = 0 ? $id : 0 ;
}

function close() {

return $this- db- close();
}


function halt($message,$sql)
{
$dberror = $this- error();
$dberrno = $this- errno();
$help_link = "http://faq.comsenz.com/?type=mysql&dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror);
echo " div "position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;/"
b MySQL Error /b br
b Message /b : $message br
b SQL /b : $sql br
b Error /b : $dberror br
b Errno. /b : $dberrno br
a href=/"$help_link/" target=/"_blank/" Click here to seek help. /a
/div
exit();
}

function __destruct()
{


$this- db=null;

}


/* MySQLi類
面向對象接口 面向過程接口 別名 描述
屬性
$mysqli- affected_rows mysqli_affected_rows() N/A 獲取前一個Mysql操作的受影響行數
$mysqli- client_info mysqli_get_client_info() N/A 返回字符串類型的Mysql客戶端版本信息
$mysqli- client_version mysqli_get_client_version() N/A 返回整型的Mysql客戶端版本信息
$mysqli- connect_errno mysqli_connect_errno() N/A 返回最后一次連接調用的錯誤代碼
$mysqli- connect_error mysqli_connect_error() N/A 返回一個字符串描述的最后一次連接調用的錯誤代碼
$mysqli- errno mysqli_errno() N/A 返回最近的函數調用產生的錯誤代碼
$mysqli- error mysqli_error() N/A 返回字符串描述的最近一次函數調用產生的錯誤代碼
$mysqli- field_count mysqli_field_count() N/A 返回最近一次查詢獲取到的列的數目
$mysqli- host_info mysqli_get_host_info() N/A 返回一個能夠代表使用的連接類型的字符串
$mysqli- protocol_version mysqli_get_proto_info() N/A 返回使用的Mysql協議的版本信息
$mysqli- server_info mysqli_get_server_info() N/A 返回Mysql服務端版本的信息
$mysqli- server_version mysqli_get_server_version() N/A 返回整型的Mysql服務端版本信息
$mysqli- info mysqli_info() N/A 最近一次執行的查詢的檢索信息
$mysqli- insert_id mysqli_insert_id() N/A 返回最后一次查詢自動生成并使用的id
$mysqli- sqlstate mysqli_sqlstate() N/A 返回前一個Mysql操作的SQLSTATE錯誤
$mysqli- warning_count mysqli_warning_count() N/A 返回給定鏈接最后一次查詢的警告數量
方法
mysqli- autocommit() mysqli_autocommit() N/A 打開或關閉數據庫的自動提交功能
mysqli- change_user() mysqli_change_user() N/A 更改指定數據庫連接的用戶
mysqli- character_set_name(), mysqli- client_encoding mysqli_character_set_name() mysqli_client_encoding() 返回數據庫連接的默認字符集
mysqli- close() mysqli_close() N/A 關閉先前打開的數據庫連接
mysqli- commit() mysqli_commit() N/A 提交當前事務
mysqli::__construct() mysqli_connect() N/A 打開一個到Mysql服務端的新的連接[注意:靜態方法]
mysqli- debug() mysqli_debug() N/A 執行調試操作
mysqli- dump_debug_info() mysqli_dump_debug_info() N/A 將調試信息轉儲到日志中
mysqli- get_charset() mysqli_get_charset() N/A 返回對象的字符集
mysqli- get_connection_stats() mysqli_get_connection_stats() N/A 返回客戶端連接的統計信息。 僅可用于 mysqlnd。
mysqli- get_client_info() mysqli_get_client_info() N/A 返回字符串描述的Mysql客戶端版本
mysqli- get_client_stats() mysqli_get_client_stats() N/A 返回每個客戶端進程的統計信息。 僅可用于 mysqlnd。
mysqli- get_cache_stats() mysqli_get_cache_stats() N/A 返回客戶端的zval緩存統計信息。 僅可用于 mysqlnd。
mysqli- get_server_info() mysqli_get_server_info() N/A 沒有文檔
mysqli- get_warnings() mysqli_get_warnings() N/A 沒有文檔
mysqli::init() mysqli_init() N/A 初始化mysqli并且返回一個由mysqli_real_connect使用的資源類型。[不是在對象上,是它返回的$mysqli對象]
mysqli- kill() mysqli_kill() N/A 請求服務器殺死一個Mysql線程
mysqli- more_results() mysqli_more_results() N/A 檢查一個多語句查詢是否還有其他查詢結果集
mysqli- multi_query() mysqli_multi_query() N/A 在數據庫上執行一個多語句查詢
mysqli- next_result() mysqli_next_result() N/A 從multi_query中準備下一個結果集
mysqli- options() mysqli_options() mysqli_set_opt() 設置選項
mysqli- ping() mysqli_ping() N/A ping一個服務器連接,或者如果那個連接斷了嘗試重連
mysqli- prepare() mysqli_prepare() N/A 準備一個用于執行的SQL語句
mysqli- query() mysqli_query() N/A 在數據庫上執行一個查詢
mysqli- real_connect() mysqli_real_connect() N/A 打開一個到Mysql服務端的連接
mysqli- real_escape_string(), mysqli- escape_string() mysqli_real_escape_string() mysqli_escape_string() 轉義字符串中用于SQL語句中的特殊字符,這個轉換會考慮連接的當前字符集。
mysqli- real_query() mysqli_real_query() N/A 執行一個SQL查詢
mysqli- rollback() mysqli_rollback() N/A 回滾當前事務
mysqli- select_db() mysqli_select_db() N/A 為數據庫查詢選擇默認數據庫
mysqli- set_charset() mysqli_set_charset() N/A 設置默認的客戶端字符集
mysqli- set_local_infile_default() mysqli_set_local_infile_default() N/A 清除用戶為load data local infile命令定義的處理程序
mysqli- set_local_infile_handler() mysqli_set_local_infile_handler() N/A 設置LOAD DATA LOCAL INFILE命令執行的回調函數
mysqli- ssl_set() mysqli_ssl_set() N/A 使用SSL建立安裝連接
mysqli- stat() mysqli_stat() N/A 獲取當前系統狀態
mysqli- stmt_init() mysqli_stmt_init() N/A 初始化一個語句并且返回一個mysqli_stmt_prepare使用的對象
mysqli- store_result() mysqli_store_result() N/A 傳輸最后一個查詢的結果集
mysqli- thread_id() mysqli_thread_id() N/A 返回當前連接的線程ID
mysqli- thread_safe() mysqli_thread_safe() N/A 返回是否設定了線程安全
mysqli- use_result() mysqli_use_result() N/A 初始化一個結果集的取回
*/

/*
MySQL_STMT
面向對象接口 過程化接口 別名(不要使用) 描述
屬性
$mysqli_stmt- affected_rows mysqli_stmt_affected_rows() N/A 返回最后一條倍執行的語句改變,刪除或插入的總行數
$mysqli_stmt- errno mysqli_stmt_errno() N/A 返回最近一次語句調用的錯誤代碼
$mysqli_stmt- error mysqli_stmt_error() N/A 返回最后一條語句錯誤的字符串描述
$mysqli_stmt- field_count mysqli_stmt_field_count() N/A 返回給定語句得到的字段數量
$mysqli_stmt- insert_id mysqli_stmt_insert_id() N/A 獲取前一個INSERT操作生成的ID
$mysqli_stmt- num_rows mysqli_stmt_num_rows() N/A 返回語句結果集中的行數
$mysqli_stmt- param_count mysqli_stmt_param_count() mysqli_param_count() 返回給定語句中參數數量
$mysqli_stmt- sqlstate mysqli_stmt_sqlstate() N/A 返回前一個語句操作的SQLSTATE錯誤代碼
方法
mysqli_stmt- attr_get() mysqli_stmt_attr_get() N/A 用于獲取語句屬性的當前值
mysqli_stmt- attr_set() mysqli_stmt_attr_set() N/A 用于修改prepared語句的行為
mysqli_stmt- bind_param() mysqli_stmt_bind_param() mysqli_bind_param() 將一個變量作為參數綁定到prepared語句上
mysqli_stmt- bind_result() mysqli_stmt_bind_result() mysqli_bind_result() 將一個變量綁定到一個prepared語句上用于結果存儲
mysqli_stmt- close() mysqli_stmt_close() N/A 關閉一個prepared語句
mysqli_stmt- data_seek() mysqli_stmt_data_seek() N/A 查看語句結果集中的任意行
mysqli_stmt- execute() mysqli_stmt_execute() mysqli_execute() 執行一個prepared查詢
mysqli_stmt- fetch() mysqli_stmt_fetch() mysqli_fetch() 從一個prepared語句中抓取結果到限定變量中
mysqli_stmt- free_result() mysqli_stmt_free_result() N/A 釋放給定語句處理存儲的結果集所占內存
$mysqli_stmt- get_result() mysqli_stmt_get_result N/A 沒有文檔 僅可用于 mysqlnd。
mysqli_stmt- get_warnings() mysqli_stmt_get_warnings() N/A 沒有文檔
$mysqli_stmt- more_results() mysqli_stmt_more_results() N/A 沒有文檔 僅可用于 mysqlnd。
$mysqli_stmt- next_result() mysqli_stmt_next_result() N/A 沒有文檔 僅可用于 mysqlnd。
mysqli_stmt- num_rows() mysqli_stmt_num_rows() N/A 查閱屬性$mysqli_stmt- num_rows
mysqli_stmt- prepare() mysqli_stmt_prepare() N/A 準備一個SQL語句用于執行
mysqli_stmt- reset() mysqli_stmt_reset() N/A 重置一個prepared語句
mysqli_stmt- result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() 從一個prepared語句返回結果集元數據
mysqli_stmt- send_long_data() mysqli_stmt_send_long_data() mysqli_send_long_data() 發送數據塊
mysqli_stmt- store_result() mysqli_stmt_store_result() N/A 從一個prepared語句中傳輸一個結果集

*/

/*
MySQLi_RESULT
面向對象接口 過程化接口 別名(不要使用) 描述
屬性
$mysqli_result- current_field mysqli_field_tell() N/A 獲取當前字段在結果集指針中的開始位置
$mysqli_result- field_count mysqli_num_fields() N/A 獲取結果中字段數量
$mysqli_result- lengths mysqli_fetch_lengths() N/A 返回結果集中當前行的每列的值得長度,返回數組
$mysqli_result- num_rows mysqli_num_rows() N/A 獲取結果中行的數量
方法
mysqli_result- data_seek() mysqli_data_seek() N/A 將結果中的結果指針調整到任意行
mysqli_result- fetch_all() mysqli_fetch_all() N/A 抓取所有的結果行并且以關聯數據,數值索引數組,或者兩者皆有的方式返回結果集。僅可用于 mysqlnd。
mysqli_result- fetch_array() mysqli_fetch_array() N/A 以一個關聯數組,數值索引數組,或者兩者皆有的方式抓取一行結果
mysqli_result- fetch_assoc() mysqli_fetch_assoc() N/A 以一個關聯數組方式抓取一行結果
mysqli_result- fetch_field_direct() mysqli_fetch_field_direct() N/A 抓取一個單字段的元數據
mysqli_result- fetch_field() mysqli_fetch_field() N/A 返回結果集中的下一個字段
mysqli_result- fetch_fields() mysqli_fetch_fields() N/A 返回一個代表結果集字段的對象數組
mysqli_result- fetch_object() mysqli_fetch_object() N/A 以一個對象的方式返回一個結果集中的當前行
mysqli_result- fetch_row() mysqli_fetch_row() N/A 以一個枚舉數組方式返回一行結果
mysqli_result- field_seek() mysqli_field_seek() N/A 設置結果指針到特定的字段開始位置
mysqli_result- free(), mysqli_result- close, mysqli_result- free_result mysqli_free_result() N/A 釋放與一個結果集相關的內存
*/
/*注意 MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區別
其實這兩個參數的區別還是很大的。
(1)區別在于從服務器上檢索結果集的行。
(2)MYSQLI_USE_RESULT 啟動查詢,但實際上并未獲取任何行
(3)MYSQLI_STORE_RESULT 立即檢索所有的行
(4)MYSQLI_STORE_RESULT 從服務器上檢索結果集時,就提取了行,并為之分配內存,存儲到客戶機中,隨后調用
mysqli_fetch_array()就再也不會返回錯誤,因為它僅僅是把行脫離了已經保留結果集的數據結 構,mysqli_fetch_array()返回 NULL始終表示已經到達結果集的末端。
(5)MYSQLI_USE_RESULT 本身不檢索任何行,而只是啟動一個逐行的檢索,就是說必須對每行調 用
mysqli_fetch_array()來自己完成。既然如此,雖然正常情況下,mysqli_fetch_array()返回NULL仍然表示此 時已到達結果集的末端,但也可能表示在與服務器通信時發生錯誤。


如果是MYSQLI_USE_RESULT,query以后得到mysqli_result對象后,執行data_seek會出錯,因為
mysqli_result::data_seek() [mysqli-result.data-seek]: Function cannot be used with MYSQL_USE_RESULT

與MYSQLI_USE_RESULT相比,MYSQLI_STORE_RESULT 有著較高的內存和處理需求,因為是在客戶機上維護整個結果集,所以內存分配和創建數據結構的耗費是非常巨大的,如果想一次檢索多個行,可用 MYSQLI_USE_RESULT。
MYSQLI_USE_RESULT有著較低的內存需求,因為只需給每次處理的單行分配足夠的空間。這樣速度就較快,因為不必為結果集建立復雜的數據結構。
另一方面,MYSQLI_USE_RESULT把較大的負載加到了服務器上,它必須保留結果集中的行,直到客戶機看起來適合檢索所有的行。
*/
}

$dbHelper=new mysqliHelp;
$dbHelper- connect('localhost', 'root', '', 'tt');

//$dbHelper- db- select_db("tt");
//$dbHelper- db- set_charset("utf8");


//這里如果是MYSQLI_USE_RESULT,下面的$dbHelper- data_seek($query,10);就會出錯
$query=$dbHelper- query("select id,cateid,title from product limit 22",MYSQLI_STORE_RESULT );
//$query=$dbHelper- query("update product set createtime=UNIX_TIMESTAMP() limit 22");

//$query=$dbHelper- query("insert into `product`(`cateid`,`title`,`text`,`createtime`) values (2,'test','content',1284822691)");
//$query=$dbHelper- query("delete from `product` where id=1");
//$query=$dbHelper- query("replace into product(id,cateid,title,text,createtime) values(1,2,'this is demo','test',UNIX_TIMESTAMP())");


echo $query- num_rows."總數";

//var_dump($query);


//$row=$dbHelper- fetch_array($query);

//var_dump($row);


//finfo = $dbHelper- fetch_fields($query);

//var_dump($finfo);
// foreach ($finfo as $val) {

// printf("Name: %s/n", $val- name);
// printf("Table: %s/n", $val- table);
// printf("max. Len: %d/n", $val- max_length);
// printf("Flags: %d/n", $val- flags);
// printf("Type: %d/n/n", $val- type);
// }

//如果是查詢操作affected_rows行數為1,num_rows為查詢結果行數,num_fields為字段數目
//如果是更新或者刪除操作affected_rows為受影響的行數,num_rows為null,num_fields為null
//
$dbHelper- data_seek($query,10);

$row=$dbHelper- fetch_row($query);

var_dump($row);



echo "影響行數:", " br/
var_dump($dbHelper- affected_rows());
//var_dump($dbHelper- db- affected_rows );

echo "查詢行數"," br/
var_dump($dbHelper- num_rows($query));
echo "列數:"," br/
var_dump($dbHelper- num_fields($query));


//第1種
$sql="select id,cateid,title from product where cateid=? and title like ? and createtime ".time();

$stmt=$dbHelper- prepare($sql);

var_dump($stmt);
$stmt- bind_param('is',$cateid,$title);

$title="%%";
$cateid=10;
$stmt- execute();
$stmt- bind_result($col1, $col2,$col3);


/* fetch values */
while ($stmt- fetch()) {
printf("%s %s"." br/ ", $col1, $col3);
}

echo " br/
$title="%%";
$cateid=4;
$stmt- execute();
$stmt- bind_result($col1, $col2,$col3);


/* fetch values */
while ($stmt- fetch()) {
printf("%s %s %s"." br/ ", $col1, $col2,$col3);
}

$stmt- close();


//第2種

$stmt=$dbHelper- db- stmt_init();
$stmt- prepare($sql);
$stmt- bind_param('is',$cateid,$title);

$title="%%";
$cateid=10;
$stmt- execute();
$stmt- bind_result($col1, $col2,$col3);


/* fetch values */
while ($stmt- fetch()) {
//printf("%s %s"." br/ ", $col1, $col3);
}

echo " br/ 開始multi_query: br/


//multi_query實例
//multi_query()方法的返回值,以及 //mysqli的屬性errno、error、info等只與第一條SQL命令有關,無法判斷第二條及以后的命令是否在執行時發生了錯誤。所以在執行 //multi_query()方法的返回值是TRUE時,并不意味著后續命令在執行時沒有出錯。

$sql="select id,cateid,title from product where cateid=4;";
$sql.="select id,cateid,title from product where cateid=10";

$query=$dbHelper- db- multi_query($sql);

if($query)
{
do {
/* store first result set */
//下面兩種方法有什么區別?
// if ($result = $dbHelper- db- store_result()) {
// while ($row = $result- fetch_row()) {
// $data[]=$row;
// }
// $result- free();
// }
if ($result = $dbHelper- db- use_result()) {//返回mysqli_result類型
//$result- data_seek(0);//返回bool
while ($row = $result- fetch_row()) {
$data[]=$row;
}
//$result- close();
}


/* print divider */
if ($dbHelper- db- more_results()) {
printf("-----------------/n");
$data[]="_______________________________";
}
} while ($dbHelper- db- next_result());

}
var_dump($data);
//exit;
//執行事務 實例
//確保操作的表時innodb類型的表
//如果是MyISAM,邏輯出錯的話, 會執行所有操作,不回滾
$price=1;
$success=true;
$dbHelper- db- autocommit(0);
$result=$dbHelper- query("update product set cateid=cateid-$price where id=1000" );
if(!$result || $dbHelper- affected_rows()!=1)
{
$success=false;

}

$result=$dbHelper- query("update product set cateid=cateid+$price where id=2");
if(!$result || $dbHelper- affected_rows()!=1)
{
$success=false;

}

if($success)
{
$dbHelper- db- commit();
echo "成功";

}else
{
$dbHelper- db- rollback();
echo "失敗";

}
$dbHelper- db- autocommit(1);


//var_dump( $dbHelper- insert_id());
var_dump($mysql_debug_query); //打印sql查詢信息


//
?PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临高县| 鄂伦春自治旗| 林甸县| 邢台县| 新建县| 望奎县| 个旧市| 武清区| 阿拉善左旗| 会东县| 荔波县| 泉州市| 甘孜| 资溪县| 卢氏县| 井冈山市| 会宁县| 绥芬河市| 原阳县| 无为县| 三门县| 汉中市| 鹿邑县| 中宁县| 阿尔山市| 墨玉县| 碌曲县| 吉安县| 福泉市| 连平县| 沙田区| 乃东县| 西畴县| 浙江省| 东乌| 马龙县| 神池县| 石首市| 曲松县| 三亚市| 刚察县|