一、MySQLi扩展
MySQLi扩展比MySQL扩展的优势:
1、基于面向对象和面向过程的使用
2、支持预处理语句(防止SQL注入)
3、支持事务处理
二、MySQLi面向对象使用
MySQLi类中常用方法:
mysqli::set_charset: bool mysqli::set_charset ( string $charset
) 设置默认字符编码
mysqli::select_db: bool mysqli::select_db ( string $dbname
) 选择用于数据库查询的默认数据库
mysqli::query: mixed mysqli::query ( string $query
[, int $resultmode
= MYSQLI_STORE_RESULT ] ) 对数据库执行一次查询
mysqli::close:bool mysqli::close ( void ) 关闭先前打开的数据库连接
mysqli::$connect_errno:返回上次连接调用的错误代码
mysqli::$connect_error:返回上次连接错误的字符串描述
mysqli::$errno:返回上一个错判的字符串描述
mysqli_result类常用方法:
mysqli_result::fetch_assoc: array mysqli_result::fetch_assoc ( void ) 获取结果行作为关联数组
mysqli_result::fetch_all:mixed mysqli_result::fetch_all ([ int $resulttype
= MYSQLI_NUM ] ) 将所有结果行提取为关联数组,数字数组或两者
mysqli_result::$num_rows:获取结果中的行数
1、MySQLi-增删改使用
<?php
header('content-type:text/html;charset=utf-8');
//实例化mysqli对象
$mysqli=new mysqli();
//连接MySQL数据库
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){ //数据库连接错误号
die('连接数据库失败:'.$mysqli->connect_error); //数据库连接错误信息
}
$mysqli->select_db('user'); //选择数据库
if($mysqli->errno){
die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8'); //设置编码格式
$sql='INSERT INTO users VALUES(NULL,"wang",md5("admin123"),5);';
$result=$mysqli->query($sql); //执行SQL语句
var_dump($result); //如果执行INSERT、DELECT、DROP等语句返回True或False
//如果执行的是SELECT操作,则返回资源集
if(!$result){
echo '执行SQL语句失败:'.$mysqli->error;
}else {
echo '执行SQL语句成功';
}
$mysqli->close(); //关闭数据库连接
2、MySQLi-查询使用
当前users表中的数据:
<?php
header('content-type:text/html;charset=utf-8');
//实例化mysqli对象
$mysqli=new mysqli();
//连接MySQL数据库
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){ //数据库连接错误号
die('连接数据库失败:'.$mysqli->connect_error); //数据库连接错误信息
}
$mysqli->select_db('user'); //选择数据库
if($mysqli->errno){
die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8'); //设置编码格式
$sql='SELECT * FROM users;';
$result=$mysqli->query($sql); //执行SQL语句
if(!$result){ //如果执行SELECT查询操作,执行失败返回False,成功返回mysqli_result对象
echo '执行SQL语句失败';
}else if($result->num_rows==0){ //获取查询结果的行数
echo '查询结果行数为0';
}else {
$array1=$result->fetch_all(); //将所有结果行提取数字数组
print_r($array1);
/*
Array
(
[0] => Array
(
[0] => 1
[1] => Root
[2] => e10adc3949ba59abbe56e057f20f883e
[3] => 1
)
*/
$array1=$result->fetch_all(MYSQLI_ASSOC); //将所有结果行提取为关联数组
print_r($array1);
/*
Array
(
[0] => Array
(
[id] => 1
[username] => Root
[passwd] => e10adc3949ba59abbe56e057f20f883e
[parid] => 1
)
*/
$array1=$result->fetch_all(MYSQLI_ASSOC);
foreach($array1 as $key=>$value){
echo '用户名:'.$value['username'].'密码:'.$value['passwd'].'<br />';
/*
用户名:Root密码:e10adc3949ba59abbe56e057f20f883e
用户名:Admin密码:21232f297a57a5a743894a0e4a801fc3
用户名:SYS密码:3fde6bb0541387e4ebdadf7c2ff31123
用户名:Guest密码:f6fdffe48c908deb0f4c3bd36c032e72
用户名:wang密码:0192023a7bbd73250516f069df18b500
*/
$array1->free(); //释放结果集
}
}
$mysqli->close(); //关闭数据库连接
3、MySQL预处理
mysqli::prepare:准备执行一个 SQL 语句,返回一个语句句柄MySQLi_STMT类,可以对这个句柄进行后续的操作。 这里仅仅支持单一的 SQL 语句,不支持多 SQL 语句。
mysqli_stmt_bind_param:将变量绑定到预准备语句作为参数
mysqli_stmt_execute:执行准备好的查询
mysqli_stmt::bind_result:将变量绑定到结果存储的预准备语句
mysqli_stmt::fetch:将准备好的语句中的结果提取到绑定变量中
mysqli_stmt::free_result:释放给定语句句柄的存储结果内存
mysqli_stmt::close:关闭准备好的语句
<?php
header('content-type:text/html;charset=utf-8');
$id=$_GET['id'];
$mysqli=new mysqli();
$mysqli->connect('localhost','root','root');
if($mysqli->connect_errno){
die('数据库链接失败:'.$mysqli->connect_error);
}
$mysqli->select_db('user');
if($mysqli->errno){
die('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf8');
$sql='SELECT id,username,passwd FROM users WHERE id=?'; //预编译使用?号进行占位
$stmt=$mysqli->prepare($sql); //准备执行一个SQL,返回stmt类
$stmt->bind_param('i',$id); //绑定变量 i:整数 s:字符串
if($stmt->execute()){ //执行sql语句
$stmt->bind_result($id,$username,$passwd); //将变量绑定到结果存储中
while($stmt->fetch()){ //将结果提取到变量中
echo 'ID:'.$id.'<br />';
echo '用户名:'.$username.'<br />';
echo '密码:'.$passwd.'<br />';
echo '<hr />';
}
}
$stmt->free_result(); //释放结果集
$stmt->close();
$mysqli->close();