|
define("MYSQL_OPEN_LOGS",true);
class mysqliHelp
{
private $db;
public function __construct()
{
//如果要查詢(xún)?nèi)罩緇og的話,怎么辦
}
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();// 關(guān)聯(lián)數(shù)組
}
function fetch_row($query)
{
return $query->fetch_row();// 索引數(shù)組,數(shù)字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] ;
}
//真正查詢(xún)
$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對(duì)象
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 沒(méi)有
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 style=/"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類(lèi)
面向?qū)ο蠼涌?nbsp; 面向過(guò)程接口 別名 描述
屬性
$mysqli->affected_rows mysqli_affected_rows() N/A 獲取前一個(gè)Mysql操作的受影響行數(shù)
$mysqli->client_info mysqli_get_client_info() N/A 返回字符串類(lèi)型的Mysql客戶(hù)端版本信息
$mysqli->client_version mysqli_get_client_version() N/A 返回整型的Mysql客戶(hù)端版本信息
$mysqli->connect_errno mysqli_connect_errno() N/A 返回最后一次連接調(diào)用的錯(cuò)誤代碼
$mysqli->connect_error mysqli_connect_error() N/A 返回一個(gè)字符串描述的最后一次連接調(diào)用的錯(cuò)誤代碼
$mysqli->errno mysqli_errno() N/A 返回最近的函數(shù)調(diào)用產(chǎn)生的錯(cuò)誤代碼
$mysqli->error mysqli_error() N/A 返回字符串描述的最近一次函數(shù)調(diào)用產(chǎn)生的錯(cuò)誤代碼
$mysqli->field_count mysqli_field_count() N/A 返回最近一次查詢(xún)獲取到的列的數(shù)目
$mysqli->host_info mysqli_get_host_info() N/A 返回一個(gè)能夠代表使用的連接類(lèi)型的字符串
$mysqli->protocol_version mysqli_get_proto_info() N/A 返回使用的Mysql協(xié)議的版本信息
$mysqli->server_info mysqli_get_server_info() N/A 返回Mysql服務(wù)端版本的信息
$mysqli->server_version mysqli_get_server_version() N/A 返回整型的Mysql服務(wù)端版本信息
$mysqli->info mysqli_info() N/A 最近一次執(zhí)行的查詢(xún)的檢索信息
$mysqli->insert_id mysqli_insert_id() N/A 返回最后一次查詢(xún)自動(dòng)生成并使用的id
$mysqli->sqlstate mysqli_sqlstate() N/A 返回前一個(gè)Mysql操作的SQLSTATE錯(cuò)誤
$mysqli->warning_count mysqli_warning_count() N/A 返回給定鏈接最后一次查詢(xún)的警告數(shù)量
方法
mysqli->autocommit() mysqli_autocommit() N/A 打開(kāi)或關(guān)閉數(shù)據(jù)庫(kù)的自動(dòng)提交功能
mysqli->change_user() mysqli_change_user() N/A 更改指定數(shù)據(jù)庫(kù)連接的用戶(hù)
mysqli->character_set_name(), mysqli->client_encoding mysqli_character_set_name() mysqli_client_encoding() 返回?cái)?shù)據(jù)庫(kù)連接的默認(rèn)字符集
mysqli->close() mysqli_close() N/A 關(guān)閉先前打開(kāi)的數(shù)據(jù)庫(kù)連接
mysqli->commit() mysqli_commit() N/A 提交當(dāng)前事務(wù)
mysqli::__construct() mysqli_connect() N/A 打開(kāi)一個(gè)到Mysql服務(wù)端的新的連接[注意:靜態(tài)方法]
mysqli->debug() mysqli_debug() N/A 執(zhí)行調(diào)試操作
mysqli->dump_debug_info() mysqli_dump_debug_info() N/A 將調(diào)試信息轉(zhuǎn)儲(chǔ)到日志中
mysqli->get_charset() mysqli_get_charset() N/A 返回對(duì)象的字符集
mysqli->get_connection_stats() mysqli_get_connection_stats() N/A 返回客戶(hù)端連接的統(tǒng)計(jì)信息。 僅可用于 mysqlnd。
mysqli->get_client_info() mysqli_get_client_info() N/A 返回字符串描述的Mysql客戶(hù)端版本
mysqli->get_client_stats() mysqli_get_client_stats() N/A 返回每個(gè)客戶(hù)端進(jìn)程的統(tǒng)計(jì)信息。 僅可用于 mysqlnd。
mysqli->get_cache_stats() mysqli_get_cache_stats() N/A 返回客戶(hù)端的zval緩存統(tǒng)計(jì)信息。 僅可用于 mysqlnd。
mysqli->get_server_info() mysqli_get_server_info() N/A 沒(méi)有文檔
mysqli->get_warnings() mysqli_get_warnings() N/A 沒(méi)有文檔
mysqli::init() mysqli_init() N/A 初始化mysqli并且返回一個(gè)由mysqli_real_connect使用的資源類(lèi)型。[不是在對(duì)象上,是它返回的$mysqli對(duì)象]
mysqli->kill() mysqli_kill() N/A 請(qǐng)求服務(wù)器殺死一個(gè)Mysql線程
mysqli->more_results() mysqli_more_results() N/A 檢查一個(gè)多語(yǔ)句查詢(xún)是否還有其他查詢(xún)結(jié)果集
mysqli->multi_query() mysqli_multi_query() N/A 在數(shù)據(jù)庫(kù)上執(zhí)行一個(gè)多語(yǔ)句查詢(xún)
mysqli->next_result() mysqli_next_result() N/A 從multi_query中準(zhǔn)備下一個(gè)結(jié)果集
mysqli->options() mysqli_options() mysqli_set_opt() 設(shè)置選項(xiàng)
mysqli->ping() mysqli_ping() N/A ping一個(gè)服務(wù)器連接,或者如果那個(gè)連接斷了嘗試重連
mysqli->prepare() mysqli_prepare() N/A 準(zhǔn)備一個(gè)用于執(zhí)行的SQL語(yǔ)句
mysqli->query() mysqli_query() N/A 在數(shù)據(jù)庫(kù)上執(zhí)行一個(gè)查詢(xún)
mysqli->real_connect() mysqli_real_connect() N/A 打開(kāi)一個(gè)到Mysql服務(wù)端的連接
mysqli->real_escape_string(), mysqli->escape_string() mysqli_real_escape_string() mysqli_escape_string() 轉(zhuǎn)義字符串中用于SQL語(yǔ)句中的特殊字符,這個(gè)轉(zhuǎn)換會(huì)考慮連接的當(dāng)前字符集。
mysqli->real_query() mysqli_real_query() N/A 執(zhí)行一個(gè)SQL查詢(xún)
mysqli->rollback() mysqli_rollback() N/A 回滾當(dāng)前事務(wù)
mysqli->select_db() mysqli_select_db() N/A 為數(shù)據(jù)庫(kù)查詢(xún)選擇默認(rèn)數(shù)據(jù)庫(kù)
mysqli->set_charset() mysqli_set_charset() N/A 設(shè)置默認(rèn)的客戶(hù)端字符集
mysqli->set_local_infile_default() mysqli_set_local_infile_default() N/A 清除用戶(hù)為load data local infile命令定義的處理程序
mysqli->set_local_infile_handler() mysqli_set_local_infile_handler() N/A 設(shè)置LOAD DATA LOCAL INFILE命令執(zhí)行的回調(diào)函數(shù)
mysqli->ssl_set() mysqli_ssl_set() N/A 使用SSL建立安裝連接
mysqli->stat() mysqli_stat() N/A 獲取當(dāng)前系統(tǒng)狀態(tài)
mysqli->stmt_init() mysqli_stmt_init() N/A 初始化一個(gè)語(yǔ)句并且返回一個(gè)mysqli_stmt_prepare使用的對(duì)象
mysqli->store_result() mysqli_store_result() N/A 傳輸最后一個(gè)查詢(xún)的結(jié)果集
mysqli->thread_id() mysqli_thread_id() N/A 返回當(dāng)前連接的線程ID
mysqli->thread_safe() mysqli_thread_safe() N/A 返回是否設(shè)定了線程安全
mysqli->use_result() mysqli_use_result() N/A 初始化一個(gè)結(jié)果集的取回
*/
/*
MySQL_STMT
面向?qū)ο蠼涌?nbsp; 過(guò)程化接口 別名(不要使用) 描述
屬性
$mysqli_stmt->affected_rows mysqli_stmt_affected_rows() N/A 返回最后一條倍執(zhí)行的語(yǔ)句改變,刪除或插入的總行數(shù)
$mysqli_stmt->errno mysqli_stmt_errno() N/A 返回最近一次語(yǔ)句調(diào)用的錯(cuò)誤代碼
$mysqli_stmt->error mysqli_stmt_error() N/A 返回最后一條語(yǔ)句錯(cuò)誤的字符串描述
$mysqli_stmt->field_count mysqli_stmt_field_count() N/A 返回給定語(yǔ)句得到的字段數(shù)量
$mysqli_stmt->insert_id mysqli_stmt_insert_id() N/A 獲取前一個(gè)INSERT操作生成的ID
$mysqli_stmt->num_rows mysqli_stmt_num_rows() N/A 返回語(yǔ)句結(jié)果集中的行數(shù)
$mysqli_stmt->param_count mysqli_stmt_param_count() mysqli_param_count() 返回給定語(yǔ)句中參數(shù)數(shù)量
$mysqli_stmt->sqlstate mysqli_stmt_sqlstate() N/A 返回前一個(gè)語(yǔ)句操作的SQLSTATE錯(cuò)誤代碼
方法
mysqli_stmt->attr_get() mysqli_stmt_attr_get() N/A 用于獲取語(yǔ)句屬性的當(dāng)前值
mysqli_stmt->attr_set() mysqli_stmt_attr_set() N/A 用于修改prepared語(yǔ)句的行為
mysqli_stmt->bind_param() mysqli_stmt_bind_param() mysqli_bind_param() 將一個(gè)變量作為參數(shù)綁定到prepared語(yǔ)句上
mysqli_stmt->bind_result() mysqli_stmt_bind_result() mysqli_bind_result() 將一個(gè)變量綁定到一個(gè)prepared語(yǔ)句上用于結(jié)果存儲(chǔ)
mysqli_stmt->close() mysqli_stmt_close() N/A 關(guān)閉一個(gè)prepared語(yǔ)句
mysqli_stmt->data_seek() mysqli_stmt_data_seek() N/A 查看語(yǔ)句結(jié)果集中的任意行
mysqli_stmt->execute() mysqli_stmt_execute() mysqli_execute() 執(zhí)行一個(gè)prepared查詢(xún)
mysqli_stmt->fetch() mysqli_stmt_fetch() mysqli_fetch() 從一個(gè)prepared語(yǔ)句中抓取結(jié)果到限定變量中
mysqli_stmt->free_result() mysqli_stmt_free_result() N/A 釋放給定語(yǔ)句處理存儲(chǔ)的結(jié)果集所占內(nèi)存
$mysqli_stmt->get_result() mysqli_stmt_get_result N/A 沒(méi)有文檔 僅可用于 mysqlnd。
mysqli_stmt->get_warnings() mysqli_stmt_get_warnings() N/A 沒(méi)有文檔
$mysqli_stmt->more_results() mysqli_stmt_more_results() N/A 沒(méi)有文檔 僅可用于 mysqlnd。
$mysqli_stmt->next_result() mysqli_stmt_next_result() N/A 沒(méi)有文檔 僅可用于 mysqlnd。
mysqli_stmt->num_rows() mysqli_stmt_num_rows() N/A 查閱屬性$mysqli_stmt->num_rows
mysqli_stmt->prepare() mysqli_stmt_prepare() N/A 準(zhǔn)備一個(gè)SQL語(yǔ)句用于執(zhí)行
mysqli_stmt->reset() mysqli_stmt_reset() N/A 重置一個(gè)prepared語(yǔ)句
mysqli_stmt->result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() 從一個(gè)prepared語(yǔ)句返回結(jié)果集元數(shù)據(jù)
mysqli_stmt->send_long_data() mysqli_stmt_send_long_data() mysqli_send_long_data() 發(fā)送數(shù)據(jù)塊
mysqli_stmt->store_result() mysqli_stmt_store_result() N/A 從一個(gè)prepared語(yǔ)句中傳輸一個(gè)結(jié)果集
*/
/*
MySQLi_RESULT
面向?qū)ο蠼涌?nbsp; 過(guò)程化接口 別名(不要使用) 描述
屬性
$mysqli_result->current_field mysqli_field_tell() N/A 獲取當(dāng)前字段在結(jié)果集指針中的開(kāi)始位置
$mysqli_result->field_count mysqli_num_fields() N/A 獲取結(jié)果中字段數(shù)量
$mysqli_result->lengths mysqli_fetch_lengths() N/A 返回結(jié)果集中當(dāng)前行的每列的值得長(zhǎng)度,返回?cái)?shù)組
$mysqli_result->num_rows mysqli_num_rows() N/A 獲取結(jié)果中行的數(shù)量
方法
mysqli_result->data_seek() mysqli_data_seek() N/A 將結(jié)果中的結(jié)果指針調(diào)整到任意行
mysqli_result->fetch_all() mysqli_fetch_all() N/A 抓取所有的結(jié)果行并且以關(guān)聯(lián)數(shù)據(jù),數(shù)值索引數(shù)組,或者兩者皆有的方式返回結(jié)果集。僅可用于 mysqlnd。
mysqli_result->fetch_array() mysqli_fetch_array() N/A 以一個(gè)關(guān)聯(lián)數(shù)組,數(shù)值索引數(shù)組,或者兩者皆有的方式抓取一行結(jié)果
mysqli_result->fetch_assoc() mysqli_fetch_assoc() N/A 以一個(gè)關(guān)聯(lián)數(shù)組方式抓取一行結(jié)果
mysqli_result->fetch_field_direct() mysqli_fetch_field_direct() N/A 抓取一個(gè)單字段的元數(shù)據(jù)
mysqli_result->fetch_field() mysqli_fetch_field() N/A 返回結(jié)果集中的下一個(gè)字段
mysqli_result->fetch_fields() mysqli_fetch_fields() N/A 返回一個(gè)代表結(jié)果集字段的對(duì)象數(shù)組
mysqli_result->fetch_object() mysqli_fetch_object() N/A 以一個(gè)對(duì)象的方式返回一個(gè)結(jié)果集中的當(dāng)前行
mysqli_result->fetch_row() mysqli_fetch_row() N/A 以一個(gè)枚舉數(shù)組方式返回一行結(jié)果
mysqli_result->field_seek() mysqli_field_seek() N/A 設(shè)置結(jié)果指針到特定的字段開(kāi)始位置
mysqli_result->free(), mysqli_result->close, mysqli_result->free_result mysqli_free_result() N/A 釋放與一個(gè)結(jié)果集相關(guān)的內(nèi)存
*/
/*注意 MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區(qū)別
其實(shí)這兩個(gè)參數(shù)的區(qū)別還是很大的。
(1)區(qū)別在于從服務(wù)器上檢索結(jié)果集的行。
(2)MYSQLI_USE_RESULT 啟動(dòng)查詢(xún),但實(shí)際上并未獲取任何行
(3)MYSQLI_STORE_RESULT 立即檢索所有的行
(4)MYSQLI_STORE_RESULT 從服務(wù)器上檢索結(jié)果集時(shí),就提取了行,并為之分配內(nèi)存,存儲(chǔ)到客戶(hù)機(jī)中,隨后調(diào)用
mysqli_fetch_array()就再也不會(huì)返回錯(cuò)誤,因?yàn)樗鼉H僅是把行脫離了已經(jīng)保留結(jié)果集的數(shù)據(jù)結(jié) 構(gòu),mysqli_fetch_array()返回 NULL始終表示已經(jīng)到達(dá)結(jié)果集的末端。
(5)MYSQLI_USE_RESULT 本身不檢索任何行,而只是啟動(dòng)一個(gè)逐行的檢索,就是說(shuō)必須對(duì)每行調(diào) 用
mysqli_fetch_array()來(lái)自己完成。既然如此,雖然正常情況下,mysqli_fetch_array()返回NULL仍然表示此 時(shí)已到達(dá)結(jié)果集的末端,但也可能表示在與服務(wù)器通信時(shí)發(fā)生錯(cuò)誤。
如果是MYSQLI_USE_RESULT,query以后得到mysqli_result對(duì)象后,執(zhí)行data_seek會(huì)出錯(cuò),因?yàn)?
mysqli_result::data_seek() [mysqli-result.data-seek]: Function cannot be used with MYSQL_USE_RESULT
與MYSQLI_USE_RESULT相比,MYSQLI_STORE_RESULT 有著較高的內(nèi)存和處理需求,因?yàn)槭窃诳蛻?hù)機(jī)上維護(hù)整個(gè)結(jié)果集,所以?xún)?nèi)存分配和創(chuàng)建數(shù)據(jù)結(jié)構(gòu)的耗費(fèi)是非常巨大的,如果想一次檢索多個(gè)行,可用 MYSQLI_USE_RESULT。
MYSQLI_USE_RESULT有著較低的內(nèi)存需求,因?yàn)橹恍杞o每次處理的單行分配足夠的空間。這樣速度就較快,因?yàn)椴槐貫榻Y(jié)果集建立復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
另一方面,MYSQLI_USE_RESULT把較大的負(fù)載加到了服務(wù)器上,它必須保留結(jié)果集中的行,直到客戶(hù)機(jī)看起來(lái)適合檢索所有的行。
*/
}
$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);就會(huì)出錯(cuò)
$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."總數(shù)";
//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);
// }
//如果是查詢(xún)操作affected_rows行數(shù)為1,num_rows為查詢(xún)結(jié)果行數(shù),num_fields為字段數(shù)目
//如果是更新或者刪除操作affected_rows為受影響的行數(shù),num_rows為null,num_fields為null
//
$dbHelper->data_seek($query,10);
$row=$dbHelper->fetch_row($query);
var_dump($row);
echo "影響行數(shù):", "<br/>";
var_dump($dbHelper->affected_rows());
//var_dump($dbHelper->db->affected_rows );
echo "查詢(xún)行數(shù)","<br/>";
var_dump($dbHelper->num_rows($query));
echo "列數(shù):","<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/>開(kāi)始multi_query:<br/>";
//multi_query實(shí)例
//multi_query()方法的返回值,以及 //mysqli的屬性errno、error、info等只與第一條SQL命令有關(guān),無(wú)法判斷第二條及以后的命令是否在執(zhí)行時(shí)發(fā)生了錯(cuò)誤。所以在執(zhí)行 //multi_query()方法的返回值是TRUE時(shí),并不意味著后續(xù)命令在執(zhí)行時(shí)沒(méi)有出錯(cuò)。
$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 */
//下面兩種方法有什么區(qū)別?
// if ($result = $dbHelper->db->store_result()) {
// while ($row = $result->fetch_row()) {
// $data[]=$row;
// }
// $result->free();
// }
if ($result = $dbHelper->db->use_result()) {//返回mysqli_result類(lèi)型
//$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;
//執(zhí)行事務(wù) 實(shí)例
//確保操作的表時(shí)innodb類(lèi)型的表
//如果是MyISAM,邏輯出錯(cuò)的話, 會(huì)執(zhí)行所有操作,不回滾
$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查詢(xún)信息
//
?>
php技術(shù):php操作mysqli(示例代碼),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。