博客列表 >mysqli与PDO增删改查 2018年8月30日 23:00

mysqli与PDO增删改查 2018年8月30日 23:00

EmonXu的博客
EmonXu的博客原创
2018年09月06日 01:36:00630浏览

连接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不适用。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议