批改状态:合格
老师批语:
连接MYSQL数据库常用的方式有两种,mysqli和PDO.
首先来看mysqli的代码:
<?php
require 'dblink.php';
$sql="insert ignore staff(name,salary) value (?,?)";
$stmt = $mysqli->prepare($sql);
if( !$stmt ) {
die( $mysqli->error);
}
$name = '勒布朗';
$salary = 20000;
$stmt->bind_param('si',$name,$salary);
if ($stmt->execute()){
if($stmt->affected_rows>0){
echo '影响了',$stmt->affected_rows,'条数据,主键为',$stmt->insert_id,'<br>';
}else{
echo '没有插入数据','<br>';
}
}else{
echo $stmt->errno,':',$stmt->error,'<br>';
}
$sql1="select salary from staff where name=?";
$stmt1=$mysqli->prepare($sql1);
$stmt1->bind_param('s',$name);
if( !$stmt1 ) {
die( $mysqli->error);
}
if($stmt1->prepare($sql1)){
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($salary);
if($stmt1->num_rows()>0){
while($stmt1->fetch()){
echo $name,'的工资为',$salary;$salary;
};
}else {
echo '查无结果';
}
// 释放结果集
$stmt->free_result();
}else{
echo $stmt1->error;
}
$stmt->close();
$stmt1->close();
$mysqli->close();点击 "运行实例" 按钮查看在线实例
再来看PDO的代码:
<?php
$dsn='mysql:host=127.0.0.1;dbname=php';
$user='root';
$pass='root';
try{
$pdo= new pdo($dsn,$user,$pass);
}catch(PDOException $e){
die('链接失败!'.$e->getMessage());
}
//关闭
//$pdo = null;
//unset($pdo);
$sql="insert user set name =:name ,email=:email,password=:password";
$sql1="update user set email='emon@163.com' where name='emon'";
$sql2="delete from user where name='emon'";
$sql3="select * from user";
$stmt=$pdo->prepare($sql);
$stmt1=$pdo->prepare($sql1);
$stmt2=$pdo->prepare($sql2);
$stmt3=$pdo->prepare($sql3);
$data=['name'=>'emon','email'=>'emon@qq.com','password'=>'123456'];
$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);
$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);
if($stmt->execute()){
echo '成功插入',$stmt->rowCount(),'条记录','<hr>';
}else{
print_r($stmt->errorInfo());
}
if($stmt1->execute()){
echo '成功更新',$stmt->rowCount(),'条记录','<hr>';
}else{
print_r($stmt->errorInfo());
}
if($stmt2->execute()){
echo '成功删除',$stmt->rowCount(),'条记录','<hr>';
}else{
print_r($stmt->errorInfo());
}
$stmt3->execute();
// echo var_export($stmt3->fetchAll());
while($row= $stmt3->fetch($pdo::FETCH_ASSOC)) {
ECHO var_export($row),'<BR>';
}
ECHO '<hr>';
$stmt4=$pdo->prepare("select count(*) from user");
$stmt4->execute();
echo '本次查询计数:',$stmt4->fetchColumn();点击 "运行实例" 按钮查看在线实例
PDO的优势有哪些呢?
PDO有非常多的操作却是MySQL扩展库所不具备的:
1:PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.
2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
3:PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
4:PDO可以防止SQL注入,确保数据库更加安全
获取结果集记录数量的正确方式是什么?
应该用count(*)和fetchColumn()的方式来获取结果行数。rowCount()适用于insert、update、delete,对于select不适用。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号