结果集中的记录指针与遍历操作
实例
require 'mysql_connect.php';
if ($res = mysqli_query($db, "select * from staff limit 5")) {
while($row = mysqli_fetch_assoc($res)){
print_r($row); echo '
';
}
echo '
';
//将结果集中的记录指针定位到0,即第1条记录
mysqli_data_seek($res,0);
print_r(mysqli_fetch_assoc($res));
echo '
';
//将结果集中的记录指针定位到2,即第3条记录
mysqli_data_seek($res,2);
print_r(mysqli_fetch_assoc($res));
echo '
';
//那么最后一条记录的指针是多少呢?对,行数-1
mysqli_data_seek($res,mysqli_num_rows($res)-1);
print_r(mysqli_fetch_assoc($res));
echo '
';
//知道规律了,下面我们用for循环来遍历这个这个结果集
echo '
';
for($i=0; $i
mysqli_data_seek($res,$i);
print_r(mysqli_fetch_assoc($res));
echo '
';
}
//恭喜大家又学到了一种遍历结果集的方法
}
mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
预处理结果集操作
实例
//过程化风格
/*
* SELECT 语句和其他的SQL查询命令不同,它需要处理查询结果。SQL语句的执行也需要使用
* mysqli_stmt对象中的execute方法,但与mysqli对象中的query方法不同,execute方法的饭
* 返回值并不是一个mysqli_result对象。mysqli_stmt对象提供了一种更为精巧的办法来处理
* select语句查询结果:在使用execute方法执行SQL语句完成查询之后,使用mysqli_stmt对象
* 中的bind_result方法,把查询结果的各个数据列绑定到一些PHP变量上;然后使用mysqli_stmt
* 对象中的fetch方法把下一条结果记录读取到这些变量里。如果成功地读入下一条记录fetch方法
* 返回true,否则返回false,或者已经读完所有的结果返回false
*
*
* 默认情况下,select查询结果将留在MySQL服务器上,等待fetch方法把记录逐条取回到PHP程序中
* ,赋给使用bind_result方法绑定的PHP变量上。如果需要对所有记录而不只是一小部分进行处理
* ,可以调用mysqli_stmt对象中的store_result方法,把所有结果一次全部传回到PHP程序中
* 这样做不仅更有效率,而且能减轻服务器的负担。store_result方法是可选的,除了读取数据
* 不改变任何东西。
*/
//1.连接数据库
require 'mysql_connect.php';
//2.准备SQL语句
$sql = "SElECT name,salary FROM staff WHERE salary>? LIMIT 5;";
//3.创建stmt对象
$stmt = mysqli_stmt_init($db);
//4.检测SQL语句
if (mysqli_stmt_prepare($stmt, $sql)) {
//5.参数绑定 该方法把预处理语句各有关参数绑定到一些PHP变量上,
mysqli_stmt_bind_param($stmt, 'i',$salary); //i 表示int类型
$salary = 3000;
//6.执行查询 执行准备的预处理语句
mysqli_stmt_execute($stmt);
//7.获取结果集 从预处理语句中获取结果集
mysqli_stmt_store_result($stmt);
//8.将结果集中的列与变量进行绑定
mysqli_stmt_bind_result($stmt,$name,$salary);
//9.检测结果集是否为空
if(mysqli_stmt_num_rows($stmt)>0){
//10.遍历结果集 获取预处理语句结果的每条记录,并将相应的字段赋给绑定结果
while (mysqli_stmt_fetch($stmt)) {
echo "[{$name}] => {$salary}
";
}
} else {
echo '没有符合条件的记录';
}
} else { //SQL语句错误
exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));
}
//11.注销stmt对象
mysqli_stmt_close($stmt);
//12.关闭数据库连接
mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
*预处理
1.预处理技术,可以将动态变量,从SQL语句中的分离出来,单独操作
2.解决了SQL注入的安全问题
3.预处理操作是通过一个叫预处理对象的工具来操作的: STMT
基本步骤:
1.创建stmt预处理对象
2.检测SQL语句
3.参数绑定
4.执行查询
5.注销stmt预处理对象
6.关闭数据库连接
//更新操作
实例
//1.连接数据库
require 'mysql_connect.php'
//更新
$sql = "UPDATE staff SET salary=? WHERE name= ?";
$salary = 8000;
$name = '小龙女';
$stmt = mysqli_stmt_init($db);
//检测预处理语句是够正确,成功返回true,错误返回false
if (mysqli_stmt_prepare($stmt,$sql)){
mysqli_stmt_bind_param($stmt,"is",$salary,$name);
//执行SQL语句
if (mysqli_stmt_execute($stmt)){
//判断是否执行成功,受影响的数量
if (mysqli_stmt_affected_rows($stmt)>0){
echo '成功的更新了'.mysqli_stmt_affected_rows($stmt).'条记录';
}else{
echo '没有新增任何数据';
}
}else{ //返回SQL执行阶段的错误
exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));
}
}else{
exit(mysqli_stmt_errno($stmt).":".mysqli_stmt_error($stmt));
}
mysqli_stmt_close($stmt);
mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
//删除操作
实例
require 'mysql_connect.php';
$sql = "DELETE FROM staff WHERE staff_id=?";
$staff_id = 5;
$stmt = mysqli_stmt_init($db);
//检测预处理语句是够正确,成功返回true,错误返回false
if (mysqli_stmt_prepare($stmt,$sql)){
mysqli_stmt_bind_param($stmt,"i",$staff_id);
//执行SQL语句
if (mysqli_stmt_execute($stmt)){
//判断是否执行成功,受影响的数量
if (mysqli_stmt_affected_rows($stmt)>0){
echo '成功的更新了'.mysqli_stmt_affected_rows($stmt).'条记录';
}else{
echo '没有新增任何数据';
}
}else{ //返回SQL执行阶段的错误
exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));
}
}else{
exit(mysqli_stmt_errno($stmt).":".mysqli_stmt_error($stmt));
}
mysqli_stmt_close($stmt);
mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
一次新增多条
实例
//1.连接数据库
require 'mysql_connect.php';
//2.准备SQL语句
$sql = "INSERT IGNORE staff SET name=?;";
//3.创建stmt对象
$stmt = mysqli_stmt_init($db);
//4.检测SQL语句
if (mysqli_stmt_prepare($stmt, $sql)) {
/* 参数绑定 */
mysqli_stmt_bind_param($stmt, "s", $name);
$name = '武松';
/* 执行SQL语句 */
mysqli_stmt_execute($stmt);
echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);
//再次添加新数据,只需要给新变量并执行一下就可以了
$name = '西门庆';
/* 执行SQL语句 */
mysqli_stmt_execute($stmt);
echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);
$name = '武大郎';
/* 执行SQL语句 */
mysqli_stmt_execute($stmt);
echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);
} else {
exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));
}
/* 注销stmt对象 */
mysqli_stmt_close($stmt);
/* 关闭数据库连接 */
mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例