mysql 预处理创建事务_在php中使用mysqli中的预处理和事务处理语句操作MySql

使用mysqli中的预处理和事务处理语句,效率和安全都比mysql有保障

预处理:

prepare($sql); //放到数据库

$stmt->bind_param(“sdis”,$name,$price,$num,$desn); //给占位符传值,类型-变量(不能是值)

$name=”zhangsan”;

$price=56.56;

$num=66;

$desn=”good”;

$stmt->execute(); //执行

echo “最后ID”.$stmt->insert_id;

$stmt->close();

/*=================select语句=================*/

$sql=”select id,name,price,num,desn from shops where id>?”; //准备一条语句放到服务器中

$stmt=$mysqli->prepare($sql); //放到数据库

$stmt->bind_param(“i”,$id); //给占位符传值,类型-变量(不能是值)

$stmt->bind_result($id,$name,$price,$num,$desn); //绑定结果集

$id=99;

$stmt->execute(); //执行

$stmt->store_result(); //一次性讲结果都取过来,才能移动指针和获取总数

//字段信息

$result=$stmt->result_metadata();

while($field=$result->fetch_field()){

echo $field->name;

}

echo “

“;

//记录信息

$stmt->data_seek(2);

while($stmt->fetch()){

echo “$id–$name–$price–$num–$desn

“;

}

echo “记录总数:”.$stmt->num_rows;

$stmt->free_result();

$stmt->close();

?>

事务处理:

set_charset(“utf8″); //设置字符集

$mysqli->autocommit(0); //关闭自动提交

$error=true;

$price=50;

$sql=”Update zhanghaodb set yue=yue-{$price} where name=’zhangsan’”;

$result=$mysqli->query($sql);

if(!$result){

$error=false;

echo “从张三转出失败

”;

}else{

if($mysqli->affected_rows==0){

$error=false;

echo “张三的钱没有变化”;

}else{

echo “张三的钱转出成功

”;

}

}

$sql=”Update zhanghaodb set yue=yue+{$price} where name=’lisi’”;

$result=$mysqli->query($sql);

if(!$result){

$error=false;

echo “从李四转入失败

”;

}else{

if($mysqli->affected_rows==0){

$error=false;

echo “李四的钱没有变化”;

}else{

echo “李四的钱转入成功

”;

}

}

if($error){

echo “转账成功!”;

}else{

echo “转账失败!”;

$mysqli->rollback(); //回滚

}

$mysqli->autocommit(1); //开启自动提交

$mysqli->close();

?>

一次执行多条SQL语句:

50;”;

$sqls.=”delete from shops where id < 20″;

if($mysqli->multi_query($sqls)){

echo “多条语句执行成功!

”;

echo “最后插入的ID:”.$mysqli->insert_id.”

”;

//echo “影响的行数:”.$mysqli->affected_rows; //不准确!

}else{

echo “ERROR”.$mysqli->errno.”—”.$mysqli->error;

}

/*===========有结果集:select===========*/

$sqls=”select current_user();”;

$sqls.=”desc shops;”;

$sqls.=”select * fron shops”;

if($mysqli->multi_query($sqls)){

echo “多条语句执行成功!

”;

do{

$result=$mysqli->store_result(); //获取结果集

echo ‘’;

echo ‘

’;

while($field=$result->fetch_field()){

echo ‘

’.$field->name.’

’;

}

echo ‘

’;

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

echo ‘

’;

foreach($row as $col){

echo ‘

’.$col.’

’;

}

echo ‘

’;

}

echo ‘

’;

if($mysqli->more_results()){ //判断还有没有结果集

echo “

”;

}

}while($mysqli->next_result()); //取得下一个结果集

}else{

echo “ERROR”.$mysqli->errno.”—”.$mysqli->error;

}

$mysqli->close();

?>

使用mysqli_stmt类处理SELECT查询结果需要经过以下几个步骤: 1. 准备预处理语句使用mysqli_prepare()函数准备预处理语句。 2. 绑定参数(如果有):如果预处理语句有占位符,需要使用mysqli_stmt_bind_param()函数将参数绑定到占位符上。 3. 执行预处理语句使用mysqli_stmt_execute()函数执行预处理语句。 4. 获取结果集:使用mysqli_stmt_get_result()函数获取结果集。 5. 遍历结果集:使用mysqli_fetch_array()、mysqli_fetch_assoc()等函数遍历结果集,获取每一行数据。 下面是一个示例代码: ``` // 连接数据库 $mysqli = new mysqli("localhost", "user", "password", "database"); // 准备预处理语句 $stmt = mysqli_prepare($mysqli, "SELECT * FROM users WHERE id > ?"); // 绑定参数 $id = 2; mysqli_stmt_bind_param($stmt, "i", $id); // 执行预处理语句 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); // 遍历结果集 while ($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"] . ", name: " . $row["name"] . "<br>"; } // 关闭预处理语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($mysqli); ``` 在该示例,我们使用mysqli_prepare()函数准备了一条预处理语句,该语句查询了id大于2的用户信息。接着,我们使用mysqli_stmt_bind_param()函数将参数2绑定到了占位符上。然后,使用mysqli_stmt_execute()函数执行了预处理语句,并使用mysqli_stmt_get_result()函数获取了结果集。最后,我们使用mysqli_fetch_assoc()函数遍历了结果集,将每一行数据输出到了页面上。最后,我们关闭了预处理语句和数据库连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值