首页 > 作文

php操作mysqli(示例代码)

更新时间:2023-04-06 09:40:58 阅读: 评论:0

<?php

define(“mysql_open_logs”,true);

class mysqlihelp

{

private $db;

public function __construct()

{

//如果要查询日志log的话,怎么办

}

public function __get($name )

{

//echo “__get:”,$name;

if(in_array($name,array(“db”),true))//或者ist($this->$name)

return $this->$name;

return null;

}

public function connect($host,$ur,$pass,$db,$chart=’utf8′,$force=fal)

{

if($this->db && ($this->db instanceof mysqli) && !$force)

{

return ;

}

$this->db=new mysqli($host,$ur,$pass,$db);

if (mysqli_connect_error()) {

die(‘connect error (‘ . mysqli_connect_errno() . ‘) ‘

. mysqli_connect_error());

}

$this->db->t_chart($chart);

}



//$dbname string

//返回值 如果成功则返回 true,失败则返回 fal。

function lect_db ($dbname )

{

return $this->db->lect_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 resultt.

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_ek($result,$offt)

{

return $result->data_ek($offt);

}

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,失败则返回 fal。 for lect, 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(“/^(lect )/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 t.

//也可以用另外一种方式 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->clo();

}

function inrt_id()

{

if(($id = $this->db->inrt_id)>= 0)

{

return $id;

}el

{

$idarr=$this->fetch_array($this->query(“s全球通用语言elect last_inrt_id() as id”));

return intval($idarr[0]);

}



//return ($idarr=$this->fetch_array($this->query(“lect last_inrt_id() as id”)))[0]

//return ($id = $this->db-inrt_id)>= 0 ? $id : 0 ;

}

function clo() {

return $this->db->clo();

}



function halt($message,$sql)不满英文

{

$dberror = $this->error();

$dberrno = $this->errno();

$help_link = “http://faq.comnz.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 ek 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->s澳大利亚游erver_info mysqli_get_rver_info() n/a 返回mysql服务端版本的信息

$mysqli->rver_version mysqli_get_rver_version() n/a 返回整型的mysql服务端版本信息

$mysqli->info mysqli_i逆境与成才nfo() n/a 最近一次执行的查询的检索信息

$mysqli->inrt_id mysqli_inrt_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_ur() mysqli_change_ur() n/a 更改指定数据库连接的用户

mysqli->character_t_name(), mysqli->client_encoding mysqli_character_t_name() mysqli_client_encoding() 返回数据库连接的默认字符集

mysqli->clo() mysqli_clo() 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_chart() mysqli_get_chart() 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_rver_info() mysqli_get_rver_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_t_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->lect_db() mysqli_lect_db() n/a 为数据库查询选择默认数据库

mysqli->t_chart() mysqli_t_chart() n/a 设置默认的客户端字符集

mysqli->t_local_infile_default() mysqli_t_local_infile_default() n/a 清除用户为load data local infile命令定义的处理程序

mysqli->t_local_infile_handler() mysqli_t_local_infile_handler() n/a 设置load data local infile命令执行的回调函数

mysqli->ssl_t() mysqli_ssl_t() 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->u_result() mysqli_u_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->inrt_id mysqli_stmt_inrt_id() n/a 获取前一个inrt操作生成的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_t() mysqli_stmt_attr_t() 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->clo() mysqli_stmt_clo() n/a 关闭一个prepared语句

mysqli_stmt->data_ek() mysqli_stmt_data_ek() 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->ret() mysqli_stmt_ret() n/a 重置一个prepared语句

mysqli_stmt->result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() 从一个prepared语句返回结果集元数据

mysqli_stmt->nd_long_data() mysqli_stmt_nd_long_data() mysqli_nd_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_ek() mysqli_data_ek() 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_ek() mysqli_field_ek() n/a 设置结果指针到特定的字段开始位置

mysqli_result->free(), mysqli_result->clo, mysqli_result->free_result mysqli_free_result() n/a 释放与一个结果集相关的内存

*/

/*注意 mysqli_store_result和mysqli_u_result的区别

其实这两个参数的区别还是很大的。

(1)区别在于从服务器上检索结果集的行。

(2)mysqli_u_result 启动查询,但实际上并未获取任何行

(3)mysqli_store_result 立即检索所有的行

(4)mysqli_store_result 从服务器上检索结果集时,就提取了行,并为之分配内存,存储到客户机中,随后调用

mysqli_fetch_array()就再也不会返回错误,因为它仅仅是把行脱离了已经保留结果集的数据结 构,mysqli_fetch_array()返回 null始终表示已经到达结果集的末端。

(5)mysqli_u_result 本身不检索任何行,而只是启动一个逐行的检索,就是说必须对每行调 用

mysqli_fetch_array()来自己完成。既然如此,虽然正常情况下,mysqli_fetch_array()返回null仍然表示此 时已到达结果集的末端,但也可能表示在与服务器通信时发生错误。



如果是mysqli_u_result,query以后得到mysqli_result对象后,执行data_ek会出错,因为

mysqli_result::data_ek() [mysqli-result.data-ek]: function cannot be ud with mysql_u_result

与mysqli_u_result相比,mysqli_store_result 有着较高的内存和处理需求,因为是在客户机上维护整个结果集,所以内存分配和创建数据结构的耗费是非常巨大的,如果想一次检索多个行,可用 mysqli_u_result。

mysqli_u_result有着较低的内存需求,因为只需给每次处理的单行分配足够的空间。这样速度就较快,因为不必为结果集建立复杂的数据结构。

另一方面,mysqli_u_result把较大的负载加到了服务器上,它必须保留结果集中的行,直到客户机看起来适合检索所有的行。

*/

}

$dbhelper=new mysqlihelp;

$dbhelper->connect(‘localhost’, ‘root’, ”, ‘tt’);

//$dbhelper->db->lect_db(“tt”);

//$dbhelper->db->t_chart(“utf8”);



//这里如果是mysqli_u_result,下面的$dbhelper->data_ek($query,10);就会出错

$query=$dbhelper->query(“lect id,cateid,title from product limit 22”,mysqli_store_result );

//$query=$dbhelper->query(“update product t createtime=unix_timestamp() limit 22”);

//$query=$dbhelper->query(“inrt 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)excel函数乘法;

//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_ek($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=”lect 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->clo();



//第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=”lect id,cateid,title from product where cateid=4;”;

$sql.=”lect id,cateid,title from product where cateid=10″;

$query=$dbhelper->db->multi_query($sql);

if($query)

{

do {

/* store first result t */

//下面两种方法有什么区别?

// if ($result = $dbhelper->db->store_result()) {

// while ($row = $result->fetch_row()) {

// $data[]=$row;

// }

// $result->free();

// }

if ($result = $dbhelper->db->u_result()) {//返回mysqli_result类型

//$result->data_ek(0);//返回bool

while ($row = $result->fetch_row()) {

$data[]=$row;

}

//$result->clo();

}



/* 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 t cateid=cateid-$price where id=1000” );

if(!$result || $dbhelper->affected_rows()!=1)

{

$success=fal;

}

$result=$dbhelper->query(“update product t cateid=cateid+$price where id=2”);

if(!$result || $dbhelper->affected_rows()!=1)

{

$success=fal;

}

if($success)

{

$dbhelper->db->commit();

echo “成功”;

}el

{

$dbhelper->db->rollback();

echo “失败”;

}

$dbhelper->db->autocommit(1);



//var_dump( $dbhelper->inrt_id());

var_dump($mysql_debug_query); //打印sql查询信息



//

?>

本文发布于:2023-04-06 09:40:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d9e5b02ac4148c05dbe07a52297ec8cd.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:php操作mysqli(示例代码).doc

本文 PDF 下载地址:php操作mysqli(示例代码).pdf

标签:语句   数组   字段   字符串
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图