//mysqli类中的成员方法(共33个)
__construct() //构造方法,用于创建一个新的mysqli对象,也可以建立一个连接
autocommit() //开启或关闭数据库修改自动提交
change_user //改变数据连接所指定的用户
character_set_name() //返回数据库默认的字符集
close() //关闭先前打开的连接
commit() //提交当前的事务
connect() //打开一个新的连接到MySQL数据库服务器
debug() //执行调试操作
dump_debug_info() //转储调试信息
get_client_info() //返回客户端版本
get_host_info() //返回一个字符串代表的连接使用类型,如:Localhost via UNIX socket
get_server_info() //返回MySQL服务器的版本,如:4.1.2-alpha-debug
get_server_version() //返回整数形式的MySQL服务器版本,如:40102
init() //初始化MySQLi并返回一个资源
info() //检索有关最近执行的查询
kill() //要求服务器去杀死一个MySQL线程
multi_query() //执行多个查询语句
more_results() //从多查询语句中检查是否有任何更多的查询结果
Next_result() //从当前执行的多查询中读取下一个结果
options() //设置选项
ping() //如果没有连接,ping一台服务器连接或重新连接
prepare() //准备一个SQL语句的执行,返回mysqli_stmt对象
query() //与数据库的任何交互都是通过查询进行的,该方法向数据库发送查询来执行
real_connect() //试图打开一个连接到MySQL数据库报务器
escape_string() //转义特殊字符的字符串,用于在一个SQL语句,并考虑到当前的字符集的连接
rollback() //回滚当前事务
select_db() //为数据库查询选择默认的数据库
set_charset() //设置默认客户端字符集
ssl_set() //获取当前的系统状态
stat() //获取当前的系统状态
stmt_init() //初始化一个声明,并返回一个mysqli_stmt对象
store_result() //从最后查询中转让结果集
thread_safe() //是否考虑返回安全的线程
//mysqli类中的成员属性
$affected_rows //在前一个MySQL操作中获取影响和行数
$client_info //MySQL客户端版本,一个字符串返回
$client_version //MySQL客户端版本,一个整数的返回
$errno //返回最近函数调用的错误代码
$error //返回最近函数的错误信息字符串
$field_count //传回最近查询获取的列数
$host_info //返回一个字符串的连接类型使用
$info //检索有关最近执行的查询
$insert_id //返回使用最后查询自动生成的编号
$protocol_version //返回MySQL协议使用的版本
$sqlstate //返回一个字符串包含SQLSTATE错误码的最后一个错
$thread_id //为当前连接返回线程ID
$warning_count //返回一个SQL语句执行过程中产生的警告数量
构造方法原型:
class mysqli{
__construct([string host[,string usename[,string passwd[,string dbname[,int port[,string socket]]
]]]])
}
该方法与mysql_connect()函数相似
连接数据库实例:
1.
<?php
$mysqli=new mysqli('localhost','mysql_user','mysql_pwd','use_db_name');
?>
2.
<?
$mysqli=new mysqli();
$mysqli=>connect('localhost','mysql_user','mysql_pwd');
$mysqli=>select_db('mysql_db_name');
?>
使用mysqli构造方法建立连接时无法设置任何MySQL特有的连接选项。若要设置连接选项,可使用mysqli_init()创建连接
<?php
/*使用mysqli_init()创建一个连接对象*/
$mysqli=mysqli_init();
$mysqli->options(MYSQLI_INIT_COMMAND,'SET AUTOCOMMIT=0'); //连接成功即执行'SET AUTOCOMMIT=0'
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT,5); //设置连接超时的时间,以秒为单位
$mysqli->real_connect('localhost','mysql_user','mysql_pwd','my_db_name');
?>
mysqli_connect_errno()测试连接过程中是否出错
使用mysqli_connect_error()函数负责返回错误信息
<?php
$mysqli=new mysqli('localhost','mysql_user','mysql_pwd','dbname');
/*检查连接,如果连接出错输出错误信息并退出程序*/
if(mysqli_connect_errno()){
printf('连接失败:%s\n',mysqli_connect_error());
exit();
}
?>
完成数据库访问工作后,应该及时关闭连接释放有关的mysqli对象。
虽然脚本执行结束后,所有打开的数据库连接都将自动关闭,资源被回收。
但是,在执行过程中,有可能页面需要多个数据库连接,各个连接要在适当的时候将其关闭。
mysqli对象中的close()方法负责关闭打开的数据库连接,成功时返回true,否则返回false
<?php
/
*连接到mysql数据库并成功返回mysqli对象*/
$mysqli=new mysqli('localhost','mysql_user','mysql_pwd','mysql_db_name');
/*检查连接是否出错*/
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
php远程连接mysql数据库 }
/*打印当前数据库使用字符集字符串*/
printf("当前数据库的字符集为:%s<br>",$mysqli->character_set_name());
/*打印客户端版本*/
printf("当前客户端的版本为:%s<br>",$mysqli->get_client_info());
/
*打印服务器主机信息*/
printf("主机信息:%s<br>",$mysqli->host_info);
/*打印整数形式mysql服务器版本*/
printf("服务器版本:%d<br>",$mysqli->server_version);
/*关闭打开的数据库连接*/
$mysqli->close();
?>
代码输出结果:
当前数据库的字符串:latinl
客户端版本:5.051a
主机信息:localhost via TCP/IP
服务器版本:5.0.51b-community-nt-log
服务器版本:50051
执行SQL命令
无论如何通过PHP脚本与Mysql数据库交互,过程都是一样的,创建一个SQL语句,再传递给执行查询的函数。
在mysqli类中提供了几种执行SQL命令的方法,其中最常用的是query()方法。
对于insert update delete 等不会返回数据的SQL命令,query()方法在SQL命令成功执行时返回true。
在此基础上还可以通过mysqli对象中的affected_rows属性猎取有多少条记
录发生变化
而且使用mysqli对象中的insert_id()方法可以返回最后一条insert命令生成的AUTO_INCREMENT编号值。
如果在执行SQL命令发生错误,query()方法将返回false,此时可以通过mysqli对象中的errno、error属
性获取错误编号和错误原因。
注:query()方法每次调用只能执行一条SQL命令,如果想一次执行多条命令,就必须使用mysqli对象中的multi_query()方法。
如果想以不同的参数多次执行一条SQL命令,最有效率的办法是先对那条命令做一些预处理然后再执行。
<?php
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
/*执行插入命令,并获取它的自动编号值*/
if($mysqli->query("insert into 表名(列1,列2) value ('值1,值2')")){
echo "改变的记录数:".$mysqli->affected_rows."<br>";
echo "新插入的ID值:".$mysqli->insert_id."<br>";
}
$mysqli->close();
?>
mysqli_result类
成员方法
close() 释放内在并关闭结果集,一旦调用结果集就不可再使用了。
data_seek() 明确改变当前结果记录顺序
fetch_field() 从结果集中获得某一个字段的信息
fetch_fields() 从结果集中获得全部字段的信息
fetch_field_direct() 从一个指定的列中获得类的详细信息,返回一个包含列信息的对象
fetch_array() 将以一个普通索引数组和关联数组两种形式返回一条结果记录
fetch_assoc() 将以一个普通关联数组的形式返回一条结果记录
fetch_object() 将以一个对象的形式返回一条结果记录
fetch_row() 将以一个普通索引数组的形式返回一条结果记录
field_seek() 设置结果集中字段的偏移位置
成员自属性
$current_field 获取当前结果中指向的字段偏移位置,是一个整数
$field_count 结果集中获取列的个数
$lengths 返回一个数组,保存在结果集中获取当前的第一个列的长度
$num_row 返回结果集中(包含)记录的行数
mysqli_result类的对象,默认是通过mysqli对象中的query()方法执行select语句返回的,并把所有的结果
数据从mysql服务器取回到客户端,保存在该对象中。
如果希望把结果暂时留在mysql服务器上,在有需要时才一条条地读取记录过来,就需要在调用query()方法时,
在第二个参数中提供一个MYSQL_USE_RESULT值。在处理的数据集合尺寸比较大或不适合一次全部取回到客户端
的时候,使用这个参数比较有用。但是,要想知道本次查询到底到了多少条记录,只能在所有的结果记录被全部
读取完毕之后。
使用mysqli对象中的query()方法获取结果集的代码:
$result=$mysqli->query('select * from table limit 10'); //将数据取回到客户端
从结果集中解析数据
先使用SQL创建表
create table contactInfo(
ui
d mediumint(8) unsigned NOT NULL AUTO_INCREMENT, #联系人ID
name varchar(50) NOT NULL, #姓名
deparmentId char(3) NOT NULL, #部门编号
address varchar(80) NOT NULL, #联系地址
phone varchar(20), #
email varchar(100), #联系人的
PRIMARY KEY(uid) #设置用户ID(即uid)为主键
)
;
向表中插入如下数据
UID 姓名 部门编号 联系地址
1 高某某 D01 海淀区 ******** **@**
2 洛某某 D02 朝阳区 ******** **@**
3 峰某某 D03 东城区 ******** **@**
4 李某某 D04 西城区 ******** **@**
5 陈某某 D05 昌平区 ******** **@**
fetch_row() fetch_array() fetch_assoc() fetch_object()
这个四个函数以相似的方法来依次读取结果数据行。
它们只在引用字段的方式上有差别
它们的共同点:每次调用将自动返回下一条结果记录,如果已经到达结果数据表的末尾,帽返回false
$result->fetch_row()
从结果集中获取一条结果记录,将值存放在一个索引数组中,是四个方法中最方便的一个。
各个字段需要以$row[$n]的方式读取,其中$row是从结果集中获取的一行记录返回的数组,$n为连续的整数下标。
因为返回的是索引数组,所以还可以和list()函数结合在一起使用。
<?php
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query('set names gb2312'); //设置字符集为国标2312码
/*将部门编号为D01的联系人姓名和全部取出存入到结果集中*/
$result=$mysqli->query("SELECT name,email FROM contactInfo WHERE departmentId='D01'");
echo 'D01部门的联系人姓名和:';
echo '<ol>';
while(list($name,$email)=$result->fetch_row()){
echo '<li>'.$name:$email.'</li>';
}
echo '</ol>';
?>
输出结果
D01部门的联系人姓名和:
1.高某某:**@**
2.陈某某:**@**
$result->fetch_assoc()
该方法将以一个关联数组的形式返回一条结果记录,数据的字段名表示键,字段内容表示值。
<?php
$mysqli=new mysqli('localhost','mysql_user','mysql_pwd','my_db_name');
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query('set names gb2312');
$result=mysqli->query('SELECT * FROM contactInfo');
echo '<table widht="90%" border="1" align="center">';
echo '<caption><h1>联系人信息表</h1></caption>' //<caption>标签提供了表格的简述,有可能是用于让搜索引擎更容易到
echo '<th>用户ID</th><th>姓名</th><th>部门编号</th><th>联系地址</th><th></th><th></th>';
while($row=$result->fetch_assoc()){ //注意$result->fetch_accoc()是返回关联数组,即使用$key_nam
e(键值)访问数值
echo '<tr align="cneter">';
echo '<td>'.$row['uid'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['departmentId'].'</td>';
echo '<td>'.$row['address'].'</td>';
echo '<td>'.$row['phone'].'</td>';
echo '<td>'.$row['email'].'</td>';
echo '</tr>';
}
echo '</table>';
$result->close();
$mysqli->close();
?>
$result->fetch_array()
该方法可以说是fetch()_row和fetch_assco()两个方法的结合版本,可以将结果集的各条记录获取为一个关联
数组或数值索引数组,或者同时获取为关联数组和索引数组。默认情况,会同时获取这两种数组。可以通过在该方
法传入如下不同的值来修改这种默认行为。
MYSQLI_ASSOC :记录被作为关联数组返回,字段名为键,字段内容为值。
MYSQLI_NUM :记录被作为索引数组返回,按查询中指定的字段名顺序排序。
MYSQLI_BOTH :这是默认值,记录即作为关联数组又作为索引数组返回。
$result->fetch_object()
该方法与前面三个方法不同,它将以一个对象的形式返回一条结果记录,而不是数组。它的各个字段需要以对象
的方式进行访问,数据列的名字区分字母大小写情况。
<?php
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
if(mysqli_connect_errno()){
printf("连接失败:%s<br>",mysqli_connect_error());
exit();
}
$mysqli->query("set names gb2312");
$mysqli->query("SELECT * FROM contactInfo");
echo '<table width="%90" border="1" align="center">';
echo '<caption><h1>联系人信息表</h1></caption>'
echo '<th>用户ID</th><th>姓名</th><th>部门编号</th><th>联系地址</th><th></th><th></th>';
while($rowObj=$result->fetch_object()){
echo '<tr align="center">';
echo '<td>'.$rowObj->uid.'</td>';
echo '<td>'.$rowObj->name.'</td>';
echo '<td>'.$rowObj->deparmentId.'</td>';
echo '<td>'.$rowObj->address.'</td>';
echo '<td>'.$rowObj->phone.'</td>';
echo '<td>'.$rowObj->email.'</td>';
echo '</tr>'
}
echo '</table>'
$result->close();
$mysqli->close();
?>
以上四个结果集中遍历数据的方法,每次调用都将自动返回下一条结果记录。如果想改变这个读取的顺序,可以
使用结果集对象中的data_seek()方法明确地改变当前记录位置。还可以使用结果集对象中的num_rows属性,
给出结果数据表里的记录个数。还可以使用结果对象中的lengths属性返回一个组,该数组的各个元素是使用以
上四个方法最后读取结果记录中各字段里的字符个数。
从结果集中获取数据列的信息
有里可以通过结果集对象中的field_count属性给出结果数据表里的数据列的个数、使用current_field属性获取
指向当前列的位置、使用field_seek()方法改变指向当前列的偏移位置,以及通过fetch_field()方法返回的对
象中获取当前列的信息。
<?php
$mysqli=n
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论