mysql php $res 指针 值_0424 php mysql 的预处理

结果集中的记录指针与遍历操作

实例

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);

运行实例 »

点击 "运行实例" 按钮查看在线实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值