精华内容
下载资源
问答
  • PHP PDO

    2021-01-03 01:17:30
    PHP PDO PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。 PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDOPHP5.1发行,...
  • 本文实例讲述了php PDO属性设置与操作方法。分享给大家供大家参考,具体如下: 设置PDO在处理数据的过程中采用什么方式去处理 PDO::setAttribute:设置属性 PDO::getAttribute:获取属性 语法: bool PDO::...
  • 下面小编就为大家带来一篇php pdo oracle中文乱码的快速解决方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
  • php pdo sqlsrv PHP连接sqlserver扩展dll 非官方 支持32位64位 亲测好用
  • 下面小编就为大家带来一篇php PDO判断连接是否可用的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • PHP CRUD 基于博客教程的简单 PHP PDO CRUD。
  • 本文实例讲述了php pdo连接数据库操作。分享给大家供大家参考,具体如下: pdo连接数据库的有点是能实现不同数据库之间的转换,而且有事务功能的回滚,更有pdo::prepare();pdo:::execute()函数的预处理查询,所以我...
  • 快速,高效和有用的#PHP查询生成器和PDO类 安装 composer.json文件: { " require " : { " izniburak/pdox " : " ^1 " } } 运行安装命令后。 $ composer install 或直接运行以下命令。 $ composer require ...
  • php pdo分页类

    2011-11-30 12:06:58
    php5推出的pdo统一数据接口,为了方便数据的分页写的pdo分页类。
  • 主要介绍了php PDO实现的事务回滚功能,结合具体实例形式分析了php基于PDO操作实现事务回滚功能的相关SQL语句与操作技巧,需要的朋友可以参考下
  • PHP PDO操作总结

    2020-09-04 01:02:46
    主要介绍了PHP PDO操作总结,本文讲解了使用PDO连接数据库、执行基本查询、获取行数、遍历结果集、转义用户输入的特殊字符、exec()、预处理语句等内容,需要的朋友可以参考下
  • PDO 类, 发现也会有 UTF-8 乱码问题, 以下解决方案
  • php pdo操作数据库示例

    2020-10-20 05:29:20
    本篇文章主要介绍了php pdo操作数据库示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 详解PHP PDO简单教程

    2020-10-16 21:52:14
    主要介绍了详解PHP PDO简单教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • PHP PDO函数库详解

    2021-01-20 00:21:28
    PDO->beginTransaction() — 标明回滚起始点PDO->commit() — 标明回滚结束点,并执行SQLPDO->__construct() — 建立一个PDO链接数据库的实例PDO->errorCode() — 获取错误码PDO->errorInfo() — 获取错误的信息PDO-...
  • 这是社区驱动的NuoDB PHP PDO Zend框架,提供了有限的支持和来自NuoDB的测试。 NuoDB支持Zend Framework版本1(ZF1)和版本2(ZF2)。 客户可以从Zend网站:framework.zend.com下载Zend Framework。 对于Zend ...
  • php pdo插入数据Inserting data is very simple as we already know how to establish connection with mysql (MariaDB) using PDO? We can use the same code as a skeleton and then edit the $sql query to ...

    php pdo插入数据

    Inserting data is very simple as we already know how to establish connection with mysql (MariaDB) using PDO? We can use the same code as a skeleton and then edit the $sql query to insert data instead of selecting.

    插入数据非常简单,因为我们已经知道如何使用PDO与mysql(MariaDB)建立连接 ? 我们可以使用与框架相同的代码,然后编辑$ sql查询以插入数据而不是选择数据。

    PHP code to insert data into table using PDO

    PHP代码使用PDO将数据插入表

    <?php
    //Connection Variables
    $host = "localhost";
    $uname = "username";
    $pw = "password";
    $db = "DBtest";
    
    try {
        $conn = new PDO("mysql:host=$host;dbname=$db", $uname, $pw);
    
        // set error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // SQL insert query
        $sql = "INSERT INTO users (firstname, lastname, email)
        VALUES ('John', 'Abraham', '[email protected]')";
    
        // use exec() because no results are returned
        $conn->exec($sql);
    
        echo "New record created successfully";
    }
    catch(PDOException $e) {
        echo $sql . $e->getMessage();
    }
    
    //Set Connection state to null
    $conn = null;
    
    ?>
    
    

    Output

    输出量

    New record created successfully
    
    

    This way, we can interact with MySQL using PDO to easily add new records to database table.

    这样,我们可以使用PDO与MySQL进行交互,以轻松地向数据库表中添加新记录

    翻译自: https://www.includehelp.com/php/pdo-inserting-data-into-tables.aspx

    php pdo插入数据

    展开全文
  • php pdo 参数绑定 导出数据库

    千次阅读 2018-07-22 12:08:00
    * ./conf/db_in.php <?php return [ 'host' => '192.168.20.155', 'port' => 3306, 'name' => 'ETBDM', 'username' => 'mingzhanghui', 'password' => 'mingzhanghui...

     

    * ./conf/db_in.php

    <?php
    
    return [
        'host' => '192.168.20.155',
        'port' => 3306,
        'name' => 'ETBDM',
        'username' => 'mingzhanghui',
        'password' => 'mingzhanghui*&^',
        'charset' => 'utf8'
    ];

    * ./conf/redis.php

    <?php
    
    return [
        'host' => '172.16.0.224',
        'port' =>  16379,
        'auth' =>  ''
    ];

    * index.php

    <?php
    /**
     * @param $filename string
     * @return PDO
     */
    function getDbHandler($filename) {
        $dbConf = include dirname(__FILE__).'/conf/'.$filename;
    
        try {
            $pdo = new PDO(
                sprintf(
                    'mysql:host=%s;dbname=%s;port=%d;charset=%s',
                    $dbConf['host'],
                    $dbConf['name'],
                    $dbConf['port'],
                    $dbConf['charset']
                ),
                $dbConf['username'],
                $dbConf['password']
            );
        } catch (PDOException $e) {
            echo "Database connection failed: ".$e->getMessage();
            exit;
        }
        return $pdo;
    }
    
    /**
     * @param $filename string
     * @return Redis
     */
    function getCacheHandler($filename) {
        $cacheConf = include dirname(__FILE__).'/conf/'.$filename;
    
        $redis = new Redis();
        $b = $redis->connect($cacheConf['host'], $cacheConf['port']);
        $redis->auth($cacheConf['auth']);
        if (!$b) {
            fprintf(STDERR, "Connect to redis failed!\n");
            exit(60);
        }
        return $redis;
    }
    
    /**
     * @param $filename
     * @return bool|resource
     */
    function getOutputStream($filename) {
        $dir = dirname(__FILE__).'/out';
        if (!is_dir($dir)) {
            mkdir($dir, 0755);
        }
        return fopen($dir.'/'.$filename, 'w');
    }
    
    /**
     * @param $pdo \PDO
     * @param $sql string
     * @return bool|PDOStatement
     */
    function execSql($pdo, $sql) {
        $statement = $pdo->prepare($sql);
        $statement->execute();
        return $statement;
    }
    
    $pdo = getDbHandler("db_in.php");
    $sql = <<<EOF
    SELECT BDM_EmployeeName as emp_name, 
          BDM_EmployeeAccount as account,
          BDM_EmployeeMobile  as mobile 
    FROM `BDM_EmployeeInfo` 
    WHERE BDM_EmployeeName!='';
    EOF;
    $statement = execSql($pdo, $sql);
    
    $out = getOutputStream("update_email.sql");
    
    // distinct mobile
    define('REDIS_KEY', 'mobiles');
    $cache = getCacheHandler('redis.php');
    $cache->del(REDIS_KEY);
    
    while (($o = $statement->fetchObject()) !== false) {
        // printf("'%s', '%s'\n", addslashes($o->emp_name), addslashes($o->account));
        if (empty($o->mobile)) {
            continue;
        }
        $len = strlen($o->mobile);
        if ($len < 11) {continue;}
        else if ($len > 11) {$o->mobile = substr($o->mobile, 0, 11);}
    
        // len == 11
        $matches = [];
        preg_match('/^1[35789][0-9]{9}$/', $o->mobile, $matches);
        if (empty($matches)) {
            continue;
        }
        // If this value is already in the set, FALSE is returned.
        if ($cache->sAdd(REDIS_KEY, $o->mobile)) {
            $s = sprintf("UPDATE `zkt_crm`.`5kcrm_admin_user` SET `email`='%s@jiandan100.cn' WHERE `mobile`='%s';\n",
                $o->account, $o->mobile);
            // tee
            printf($s);
            fwrite($out, $s, strlen($s));
        }
    }
    
    printf("%d entries dumped\n", $cache->sCard(REDIS_KEY));
    

    php index.php

     

    * 数据表

    -- MySQL dump 10.16  Distrib 10.1.31-MariaDB, for osx10.6 (i386)
    --
    -- Host: localhost    Database: laravel
    -- ------------------------------------------------------
    -- Server version    10.1.31-MariaDB
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Table structure for table `users`
    --
    
    DROP TABLE IF EXISTS `users`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `email` varchar(255) NOT NULL,
      `password` varchar(60) NOT NULL,
      `remember_token` varchar(100) DEFAULT NULL,
      `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      PRIMARY KEY (`id`),
      UNIQUE KEY `users_email_unique` (`email`)
    ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `users`
    --
    
    LOCK TABLES `users` WRITE;
    /*!40000 ALTER TABLE `users` DISABLE KEYS */;
    INSERT INTO `users` VALUES (1,'mingzhanghui','xxx@qq.com','123456',NULL,'2018-06-30 16:00:00','2018-07-12 16:00:00'),(2,'username#0','0@qq.com','123456','ed3d2c21991e3bef5e069713af9fa6ca','2018-07-21 09:28:37','2018-07-21 09:29:37'),(3,'username#1','1@qq.com','123456','3416a75f4cea9109507cacd8e2f2aefc','2018-07-21 09:28:37','2018-07-21 09:29:37'),(4,'username#2','2@qq.com','123456','43ec517d68b6edd3015b3edc9a11367b','2018-07-21 09:28:37','2018-07-21 09:29:37'),(5,'username#3','3@qq.com','123456','182be0c5cdcd5072bb1864cdee4d3d6e','2018-07-21 09:28:37','2018-07-21 09:29:37'),(6,'username#4','4@qq.com','123456','2a38a4a9316c49e5a833517c45d31070','2018-07-21 09:28:37','2018-07-21 09:29:37'),(7,'username#5','5@qq.com','123456','ac627ab1ccbdb62ec96e702f07f6425b','2018-07-21 09:28:37','2018-07-21 09:29:37'),(8,'username#6','6@qq.com','123456','2a38a4a9316c49e5a833517c45d31070','2018-07-21 09:28:37','2018-07-21 09:29:37'),(9,'username#7','7@qq.com','123456','f033ab37c30201f73f142449d037028d','2018-07-21 09:28:37','2018-07-21 09:29:37'),(10,'username#8','8@qq.com','123456','03afdbd66e7929b125f8597834fa83a4','2018-07-21 09:28:37','2018-07-21 09:29:37'),(11,'username#9','9@qq.com','123456','33e75ff09dd601bbe69f351039152189','2018-07-21 09:28:37','2018-07-21 09:29:37');
    /*!40000 ALTER TABLE `users` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    
    -- Dump completed on 2018-07-22 12:07:18

    users.sql

     

    * php 代码片段

    <?php
    
    $settings = [
        'host' => '127.0.0.1',
        'port'=> 3306,
        'name' => 'laravel',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8'
    ];
    try {
        $pdo = new PDO(
            sprintf(
                'mysql:host=%s;dbname=%s;port=%d;charset=%s',
                $settings['host'],
                $settings['name'],
                $settings['port'],
                $settings['charset']
            ),
            $settings['username'],
            $settings['password']
        );
    } catch (PDOException $e) {
        echo "Database connection failed: ".$e->getMessage();
        exit;
    }
    
    // $sql = 'SELECT * from users where email=:email';
    $sql = 'SELECT * from users where id < :id';
    $statement = $pdo->prepare($sql);
    
    // $email = filter_input(INPUT_GET, 'email');
    // $statement->bindValue(':email', '8@qq.com', PDO::PARAM_STR);
    $statement->bindValue(':id', 8, PDO::PARAM_INT);
    $statement->execute();
    
    // while (($result = $statement->fetch(PDO::FETCH_ASSOC)) !== false) {
    //     echo $result['email'].PHP_EOL;
    // }
    while (($o = $statement->fetchObject()) !== false) {
        echo $o->email.PHP_EOL;
    }
    
    // transanction
    // $pdo->beginTransaction();
    // ...
    // $pdo->commit();
    

      

    * output

    chenhuimingdeMacBook-Pro:database Mch$ php pdo.php

    xxx@qq.com
    0@qq.com
    1@qq.com
    2@qq.com
    3@qq.com
    4@qq.com
    5@qq.com

    展开全文
  • 主要介绍了PHP PDO操作MySQL的方法,结合实例形式详细分析了php开启pdo及数据库创建、连接与增删改查相关操作技巧,需要的朋友可以参考下
  • 絕對好用的mysql鏈接類庫,只要include即可使用 使用方便,只需要 include 文件 代碼示範: $db = new Db; $db->query('SELECT * FROM table WHERE field = :field LIMIT 1');...$db->bind(':field', 'field');...
  • php PDO异常处理详解

    2020-10-21 02:17:53
    主要给大家介绍了phpPDO异常处理的相关内容,文中给大家先进行了简单的介绍,然后通过实例代码给大家介绍了使用方式,介绍的非常详细,有需要的朋友们可以参考借鉴,感兴趣的朋友们下面来一起学习学习吧。
  • PHP PDO使用

    千次阅读 2019-11-01 16:58:40
    PDOPHP数据对象(PHP Data Object)的缩写 PDO是一个第三方类,默认以集成到PHP中 使用PDO可以轻松对接各种不同类型的数据库,且操作方式和方法调用都基本一样 PDO作用是统一各种数据库的访问接口 开启PDO...

    PDO

    概述

    • PDO是PHP数据对象(PHP Data Object)的缩写
    • PDO是一个第三方类,默认以集成到PHP中
    • 使用PDO可以轻松对接各种不同类型的数据库,且操作方式和方法调用都基本一样
    • PDO作用是统一各种数据库的访问接口

    开启PDO扩展

    开启mysql扩展为例

    • 前期:php文件中的ext文件夹中包含php_pdo_mysql.dll扩展文件
    • 修改php.ini文件,把extension = php_pdo_mysql.dll(extension=pdo_mysql)前的;去掉,然后重新启动php.exe程序(或重启apache);
    • 使用phpinfo()进行检查是否已启动PDO扩展

    创建PDO类对象

    • 语法:PDO::__construct ( string d s n ‘ [ , s t r i n g ‘ dsn` [, string ` dsn[,stringusername[, string p a s s w o r d ‘ [ , a r r a y ‘ password` [, array ` password[,arraydriver_options]]] )

      • $dsn 数据源
      • $username 用户名
      • $password 密码
    • 代码实现

    <?php
    /* 创建一个连接mysql数据库的pdo对象 */
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8';
    $user = 'dbuser';
    $password = 'dbpass';
    
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    
    ?>
    

    PDO对象常用方法

    PDO::exec()方法

    • 描述:执行一条sql语句,并返回受影响的行数(注意:select查询的sql语句,不会返回结果)
    • 语法:int PDO::exec(String $sql)
    • 参数:$sql 需要被预处理和执行的sql语句
    • 返回:返回被修改或删除的sql语句影响的行数,如果没有受影响的行,则返回0;
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            $sql = "INSERT INTO user (id,name,age,sex) VALUES(null,'xiaode',99,1)";
            $rel=$pdo->exec($sql);
            var_dump($rel);
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    PDO::query()方法

    • 描述:执行一条sql语句,返回一个结果集对象,一般用于select、show语句
    • 语法:public PDOStatemet PDO::query(String $statement)
    • 返回:执行成功返回PDOstatement对象,执行失败返回false;
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
          
            //查询结果集
            $sql = "SELECT * FROM user ORDER BY id DESC";
            $rel = $pdo->query($sql);
            var_dump($rel);
    		//输出结果
            //object(PDOStatement)#2 (1) { ["queryString"]=> string(35) "SELECT * FROM user ORDER BY id DESC" } 
         
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    PDO::lastInsertId()方法

    • 描述:返回最后插入的ID或序列值
    • 语法:String PDO::lastInsertId(void)
    • 返回值:最后出入行的ID
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            //插入语句
            $sql = "INSERT INTO user (id,name,age,sex) VALUES(null,'xiaode',99,1)";
            $rel=$pdo->exec($sql);
    
            //获取最后插入的id获取序列号
            $rel=$pdo->lastInsertId();
            var_dump($rel);//输出结果为4
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    PDO::setAttribute()方法

    • 描述:设置数据库句柄的属性

    • 语法:bool PDO::setAttribute(int $attribute,mixed $value)

    • 注意:PDO内置了以下可用的通用属性,使用参考 手册

      • PDO::ATTR_CASE 强制列名为指定的大小写
      • PDO::ATTR_ERRMODE 错误报告
      • PDO::ATTR_DEFAULT_FETDH_MODE 默认的提取模式
    • 返回值:成功返回true,失败返回false

    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
    
            //设置PDO属性 设置从结果集中提取值 FETCH_ASSOC为关联数组 FETCH_NUM枚举
            $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
    
            //查询结果集
            $sql = "SELECT * FROM user ORDER BY id DESC";
            $rel = $pdo->query($sql);
            //遍历结果集
            foreach($rel as $v){
                echo "<pre>";
                var_dump($v);
            }
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    输出结果如下:

    array(4) {
      ["id"]=>
      string(1) "4"
      ["name"]=>
      string(6) "xiaode"
      ["age"]=>
      string(2) "99"
      ["sex"]=>
      string(1) "1"
    }
    
    

    PDO预处理

    预处理过程

    • sql语句执行分两个阶段,编译和执行
    • 第一次执行sql语句,需要先编译,编译过程复杂和耗系统资源,相对不安全
    • 同一条sql语句执行,直接从缓存中读取执行,效率提高,也比较安全,从而避免sql注入等安全问题

    预处理步骤

    • PDO完成预处里需要的步骤
      • 提取相同结构的sql部分(把数据部分,可变部分进行去除)
      • 编译相同的结构,并把编译结果保存
      • 把不同的数据部分进行替换
      • 执行sql
    • 提取相同结构的sql语句
      • 在sql语句中,使用命名参数和问号参数,来代替可变的数据
      • 使用占位符“:value"和"?"来代替可变的数据

    预编译方法

    • 描述: 准备要执行的语句,并返回语句对象
    • 语法: public PDO::prepare ( string $statement [, array $driver_options = array() ] )
    • 参数:需要预处理的sql语句

    给占位符绑定数据

    • 描述:绑定一个值到预处理的sql语句中对应的命名占位符或问好占位符。
    • 语法:bool PDOStatement::bindValue(mixed $parmeter,mixed $value);
      • parameter,参数标识符,对应命名占位符的预处理语句,应该是类似:name形式的参数名,对于问号占位符的预处理语句,应该是以1开始的索引参数位置
      • $value ,绑定的参数值
    • 返回值:成功返回true 失败返回false

    执行预处理的sql语句

    • 描述:执行一条预处理的语句
    • 语法:bool PDOStatement::execute()
    • 返回:成功返回true,失败返回false

    示例1:使用命名参数方式示例

    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            //设置异常捕捉
            $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            
            //使用命名参数进行绑定
            $sql = "INSERT INTO user(name,age,sex) VALUES(:name,:age,:sex)";
    
            //对内容进行预编译
            $stmt = $pdo->prepare($sql);
    
            //对占位数据进行绑定
            $stmt->bindValue(':name','rufeike');
            $stmt->bindValue(':age',30);
            $stmt->bindValue(':sex',0);
    
            //执行已预编译的sql
            $rel=$stmt->execute();
    
            //获取最后插入的id
            $id=$pdo->lastInsertId();
            var_dump($id);
    
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
            echo "错误编号:".$e->getCode();
            echo "错误行号:".$e->getLine();
        }
    
    

    示例2:使用问号参数绑定

    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            //设置异常捕捉
            $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
            //使用问号参数绑定方式
            $sql = "INSERT INTO user(name,age,sex) VALUES(?,?,?)";
    
            //对sql语句进行预编译
            $stmt = $pdo->prepare($sql);
    
            //对占位符进行数据绑定
            $stmt->bindValue(1,'如非客2');
            $stmt->bindValue(2,28);
            $stmt->bindValue(3,1);
    
            //执行已编译的sql
            $rel = $stmt->execute();
    
            //获取最后出入的主键
            $id = $pdo->lastInsertId();
            var_dump($id);
    
    
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
            echo "错误编号:".$e->getCode();
            echo "错误行号:".$e->getLine();
        }
    
    

    从结果集提取数据

    PDOStatement::fetch()方法

    • 描述:从结果集中获取一行,并向下移动指针
    • 语法:mixed PDOStatement::fetch([int $fetch_style])
      • PDO::FETCH_ASSOC,返回一个索引为关联数组的结果值
      • PDO::FETCH_BOTH(默认),返回一个包含索引为0开始的索引数组和关联数组
      • PDO::FETCH_NUM,返回一个索引以0开始的结果集数组
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            $sql = "SELECT * FROM user ORDER BY id DESC";
            $stmt = $pdo->query($sql);
            //每次从结果集中提取一行数据
            while($rel=$stmt->fetch(PDO::FETCH_ASSOC)){
                echo "<pre>";
                var_dump($rel);
            }
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    结果输出

    array(4) {
      ["id"]=>
      string(1) "4"
      ["name"]=>
      string(6) "xiaode"
      ["age"]=>
      string(2) "99"
      ["sex"]=>
      string(1) "1"
    }
    array(4) {
      ["id"]=>
      string(1) "3"
      ["name"]=>
      string(6) "xiaode"
      ["age"]=>
      string(2) "99"
      ["sex"]=>
      string(1) "1"
    }
    

    PDOStatement::fetchAll()方法

    • 描述:返回一个包含结果集中所有行的数组
    • 语法:array PDOStatement::fetchAll([int $fetch_style])
      • PDO::FETCH_ASSOC,返回一个索引为关联数组的结果值
      • PDO::FETCH_BOTH(默认),返回一个包含索引为0开始的索引数组和关联数组
      • PDO::FETCH_NUM,返回一个索引以0开始的结果集数组
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            $sql = "SELECT * FROM user ORDER BY id DESC";
            $stmt = $pdo->query($sql);
    
            //一次性全部取出
            $rel=$stmt->fetchAll(PDO::FETCH_ASSOC);
            echo "<pre>";
            var_dump($rel);
    
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    输出结果

    array(4) {
      [0]=>
      array(4) {
        ["id"]=>
        string(1) "4"
        ["name"]=>
        string(6) "xiaode"
        ["age"]=>
        string(2) "99"
        ["sex"]=>
        string(1) "1"
      }
      [1]=>
      array(4) {
        ["id"]=>
        string(1) "3"
        ["name"]=>
        string(6) "xiaode"
        ["age"]=>
        string(2) "99"
        ["sex"]=>
        string(1) "1"
      }
    
    }
    

    PDOStatement::rowCount()方法

    • 描述:返回上一个sql语句影响的行数
    • 语法:int PDOStatem::rowCount(void)
    • 返回值:返回上一个由对应的PDOStatement 对象执行 select、delete 、insert或update语句受影响的行数
    • 前提:需要使用PDO::query() 返回的PDOStatement对象
    <?php
        //创建一个连接mysql数据库的PDO对象
        $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
        $user = 'root';
        $password = 'root';
    
        try{
            $pdo = new PDO($dsn,$user,$password);
            //获取查询结果集数
            $sql = "SELECT * FROM user ORDER BY id DESC";
            $stmt = $pdo->query($sql);
            $count=$stmt->rowCount();
            var_dump($count);
        }catch(PDOException $e){
            echo "Connection faile:".$e->getMessage();
        }
    
    

    输出结果:

    int(4)
    

    PDO错误处理

    静默模式

    • 静默模式:错误发生后,不会主动报错

      • 可以通过PDO::erroCode和PDO::errorInfo()两个方法获取
      • 默认为静默模式
      <?php
          //创建一个连接mysql数据库的PDO对象
          $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
          $user = 'root';
          $password = 'root';
      
          try{
              $pdo = new PDO($dsn,$user,$password);
      		//静默模式下获取错误信息
              $sql = "SELECT * FROM user WHERE abc = 'abc'";
              $stmt = $pdo->query($sql);
              echo "查询错误编号:".$pdo->errorCode();
              echo "查询错误信息:".print_r($pdo->errorInfo());
      
          }catch(PDOException $e){
              echo "Connection faile:".$e->getMessage();
          }
      
      

      错误信息打印结果:

      查询错误编号:42S22Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'abc' in 'where clause' ) 查询错误信息:1
      

      没有错误是的打印结果 errorCode为00000时表示没有错误

      查询错误编号:00000Array ( [0] => 00000 [1] => [2] => ) 查询错误信息:1
      

    警告模式

    • 警告模式:错误发生后,通过PHP标准来报错误

      • 设置错误模式为警告模式,错误结果根据php错误模式,直接在页面中输出
      • PDO::setAttribute(PDO::Attr_ERRMODE,PDO::ERRMODE_WARNING);
      • 这种方式不安全,会暴露系统相关信息
      <?php
          //创建一个连接mysql数据库的PDO对象
          $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
          $user = 'root';
          $password = 'root';
      
          try{
              $pdo = new PDO($dsn,$user,$password);
              //设置警告模式
              $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
      
      		//警告模式下获取错误信息 数据库中没有i字段
              $sql = "SELECT * FROM user WHERE i = 2";
              $stmt = $pdo->query($sql);
          }catch(PDOException $e){
              echo "Connection faile:".$e->getMessage();
          }
      
      

      错误打印结果

      Warning: PDO::query(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'i' in 'where clause' in C:\Users\rufeike\Desktop\phasher\test\index.php on line 52
      

    异常模式

    • 异常模式:错误发生后,抛出异常,需要捕捉和处理

      • 提示:可以通过PDO::setAttribute()更改模式
      <?php
          //创建一个连接mysql数据库的PDO对象
          $dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
          $user = 'root';
          $password = 'root';
      
          try{
              $pdo = new PDO($dsn,$user,$password);
              //设置异常模式
              $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      
      		//异常模式下获取错误信息
              $sql = "SELECT * FROM user WHERE i = 2";
              $stmt = $pdo->query($sql);
          }catch(PDOException $e){
              echo "Connection faile:".$e->getMessage();
              echo "错误编号:".$e->getCode();
              echo "错误行号:".$e->getLine();
          }
      
      

      错误打印结果

      Connection faile:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'i' in 'where clause'错误编号:42S22错误行号:52
      
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,187
精华内容 22,474
关键字:

phppdo