博客列表 >MySQLi和PDO/连接数据库/新增数据/更新数据/删除数据/查询数据—2018年9月6日01时10分

MySQLi和PDO/连接数据库/新增数据/更新数据/删除数据/查询数据—2018年9月6日01时10分

耗子的博客
耗子的博客原创
2018年09月06日 01:29:26742浏览

2. 问答: PDO 的优势

PDO是 PHP 数据 对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口

PDO简单,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。


8.问答:获取结果集记录数量的正确方式是什么?

        如果需要获取汇总数据需要使用以下方式fetchColumn,SQL使用COUNT(*)


实例

<?php
header("Content-Type: text/html; charset=utf-8");

//连接数据库
require 'db.php';





//预处理查询

$sql="SELECT `id`,`name`,`salary` FROM `user` WHERE `salary`>?;";

//创建预处理对象
$stmt=$mysqli->stmt_init();

if ($stmt->prepare($sql)){
    //绑定参数
    $stmt->bind_param('i',$salary);

    //设置参数
    $salary=5000;
}
if ($stmt->execute()) {
    //获取结果集并放到缓存区
    $stmt->store_result();

    //将结果集中的列绑定到变量上
    $stmt->bind_result($id, $name, $salary);
    if ($stmt->num_rows > 0) {
        //遍历过结果
        //fetch()
        while ($stmt->fetch()) {
            echo '<p>当前的id是:' . $id . '  名称是: ' . $name . '工资是: ' . $salary . '</p>';
        }

    } else {
        echo '当前表没有数据';
    }
}
else {
    //返回SQL语句的出错信息
    die($stmt->errno.'---'.$stmt->error);
}



//关闭预处理对象
$stmt->close();

//关闭连接
$mysqli->close();

?>

运行实例 »

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

实例3. 编程:PDO 连接数据库

<?php
/**
 * PDO是PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
 *
 */

//$dsn:数据源,设置数据库类型,数据库服务器和默认数据库
$dsn='mysql:host=127.0.0.1;dbname=php';
$user='root';
$password='root';

//$dsn="sqlsrv:Server=127.0.0.1,1433;Database=PHP";
//$user='sa';
//$password='';


try{
$pdo=new PDO($dsn,$user,$password);
//echo '<h2>连接成功</h2>';
}
catch (PDOException $e)
{
    die('Connect ERROR!:'.$e->getMessage());
}



//关闭连接
$pdo=null;
//unset($pdo);

运行实例 »

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

实例4. 编程:PDO新增数据

<?php
/**
 * 新增数据
 */

//1-连接数据库

//$pdo=new PDO('sqlsrv:Server=127.0.0.1,1433;Database=PHP','sa','');//SQL连接方式

$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="INSERT `user` SET `name`= :name , `email`=:email , `password` = sha1(:password)";
//echo $stmt->queryString;die();//输出检测SQL语句

//3-创建预处理对象
$stmt=$pdo->prepare($sql);




//4-设置参数

$data=['name'=>'何生','email'=>'he@bonsaii.com','password'=>'123456'];//定义数据组

//5-执行添加

$stmt->execute($data);
echo '<h2>成功的添加了'.$stmt->rowCount().'条记录!</h2>';




//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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

实例5.编程: PDO更新数据

<?php
/**
 *更新数据
 */

//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="UPDATE  `user` SET `name`= :name , `email`=:email  WHERE `id`=:id";


//3-创建预处理对象
$stmt=$pdo->prepare($sql);




//4-绑定参数
//$data=['name'=>'he','email'=>'hh@php.com','id'=>140];


if ($stmt->execute(['name'=>'he','email'=>'hh@php.com','id'=>140]))
{
//返回受影响的行

    echo '<h2>更新成功了:'.$stmt->rowCount().'行!</h2>';



}
else{
    echo '<h2>更新失败</h2>';
    print_r($stmt->errorInfo());
    die();
}

//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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

实例6. 编程: PDO 删除数据

<?php
/**
 * 删除数据
 */

//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="DELETE FROM  `user` WHERE `id`=:id";


//3-创建预处理对象
$stmt=$pdo->prepare($sql);



if ($stmt->execute(['id'=>32]))
{
//返回受影响的行
    echo '<h2>删除成功了:'.$stmt->rowCount().'行!</h2>';
}
else{
    echo '<h2>删除失败</h2>';
    print_r($stmt->errorInfo());
    die();
}

//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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

实例7. 编程:PDO查询数据

<?php
/**
 * 查询数据
 */

//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";


//3-创建预处理对象
$stmt=$pdo->prepare($sql);

if ($stmt->execute(['id'=>100]))
{
//返回数据


//
//    一次性取出
//    $rows=$stmt->fetchAll();
////    var_dump($rows);
//    foreach ($rows as $row)
//    {
//        echo 'user:'.$row['user'].'name:'.$row['name'].'email'.$row['email'].'<br>';
//    }

    while ( $row=$stmt->fetch(PDO::FETCH_ASSOC)){
        echo var_dump($row).'<br>';
    }
//    $row=$stmt->fetch(PDO::FETCH_ASSOC);//PDO::FETCH_ASSOC只取关联部分,默认输是取关联和索引
//    var_dump($row);





    echo '<h2>查询数据:'.$stmt->rowCount().'行!</h2>';
}
else{
    echo '<h2>查询失败</h2>';
    print_r($stmt->errorInfo());
    die();
}

//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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

实例7. 编程:PDO查询数据

<?php
/**
 * 将结果集绑定到变量上
 */

//1-连接数据库
    $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
 //2-准备SQL语句,占位符不们不用?,用"命名占位符"
    $sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";



    $stmt=$pdo->prepare($sql);

    $stmt->execute(['id'=>100]);



    //将结果集绑定到变量:列与变量绑定
    $stmt->bindColumn('user',$user);
    $stmt->bindColumn('name',$name);
    $stmt->bindColumn('email',$email);


    //用列变量来遍历结果集:建议使用类常量,PDO::FETCH_BOUND
    while ($stmt->fetch(PDO::FETCH_BOUND)){
        echo '<h4>  用户 :'.$user.'  名称: '.$name.'  邮箱:  '.$email. '</h4>';
    }


//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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

实例7. 编程:PDO查询数据

<?php
/**
 * 查询数据的行数
 */

//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
//$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";


////3-创建预处理对象
//$stmt=$pdo->prepare($sql);
//
//    if ($stmt->execute(['id'=>100])) {
////        echo $stmt->fetchColumn(1), '<br>';//获取第一行第一列的数据,默认不传值是0;如果指定2代表3列数据email,
//    }
        //如果需要获取汇总数据需要使用以下方式
        $stmt=$pdo->prepare('SELECT COUNT(*) FROM `user` WHERE `id`<=:id');
        $stmt->execute(['id'=>100]);
        echo '返回人数:'.$stmt->fetchColumn().'<hr>';



//    //返回数据
//    while ( $row=$stmt->fetch(PDO::FETCH_ASSOC))
//    {
//        echo var_dump($row).'<br>';
//    }
//    }



//关闭pdo
unset($pdo);

//关闭连接
$pdo=null;

运行实例 »

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





$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');

$stmt = $pdo->prepare($sql);


PDOStatement 类


$stmt->bindColumn : 绑定一列到一个 PHP 变量

$stmt->bindParam — 绑定一个参数到指定的变量名

$stmt->bindValue — 把一个值绑定到一个参数

$stmt->closeCursor — 关闭游标,使语句能再次被执行。

$stmt->columnCount — 返回结果集中的列数

$stmt->debugDumpParams — 打印一条 SQL 预处理命令

$stmt->errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE

$stmt->errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息

$stmt->execute — 执行一条预处理语句

$stmt->fetch — 从结果集中获取下一行

$stmt->fetchAll — 返回一个包含结果集中所有行的数组

$stmt->fetchColumn — 从结果集中的下一行返回单独的一列。

$stmt->fetchObject — 获取下一行并作为一个对象返回。

$stmt->getAttribute — 检索一个语句属性

$stmt->getColumnMeta — 返回结果集中一列的元数据

$stmt->nextRowset — 在一个多行集语句句柄中推进到下一个行集

$stmt->rowCount — 返回受上一个 SQL 语句影响的行数

$stmt->setAttribute — 设置一个语句属性

$stmt->setFetchMode — 为语句设置默认的获取



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