PHP使用PDO操作sqlite数据库应用案例


Posted in PHP onMarch 07, 2019

本文实例讲述了PHP使用PDO操作sqlite数据库。分享给大家供大家参考,具体如下:

1、需求:

已知:

1)、一个json文件,里面是一个二维数组,数组解析出来为:

array (
   0 =>
   array (
    'title' => '九十九',
   ),
   1 =>
   array (
    'title' => '电脑九十九',
   ),
   2 =>
   array (
    'title' => '手机九十九',
   ),
   3 =>
   array (
    'title' => '手机电脑九十九',
   ),
);

2)、一个sqlite数据库文件 20180824.db 新建一个sqlite数据库文件

新建表 report

表字段 id words time

求:

把从json中查到的数据,在sqlite中检索,判断是否存在;
如果存在就给sqlite加上一个 word_sort字段,把title在文件中是第几个(一次递增,不是json文件数组的键值)写入到word_sort字段

思路:

① 获取jsonlist.json文件内容并json_decode($str,true)转为二维数组
② 连接sqlite表
try{}catch(){} 给表增加 word_sort字段
④ 把json文件中的数据数组化
⑤ 每次循环5000条json数据,用 IN 在report表中查询(title字段需要拼接)
⑥ 把查询出来的数据用 sql的批量跟新语句拼接
try{}catch(){}批量更新report表数据
⑧ echo输出运行结果

2、PHP代码(yaf框架):

<?php
/**
 * @todo 组词
 * Class CommunityController
 */
class CombinwordController extends Rest{
  /**
   * @todo 判断.json数据是否存在,存在把数据往前排
   * @linux 212 /usr/local/php7/bin/php /var/www/web/shop/public/cli.php request_uri="/v1/combinword/index"
   */
  public function indexAction(){
    set_time_limit ( 0 );  //设置时间不过时
    $data = $this->getjson();  //获取json数据
    $dbfile_path = APP_PATH.'/data/combinword/20180824.db';
    $db = new PDO("sqlite:{$dbfile_path}");
    //设置数据库句柄    属性 PDO::ATTR_ERRMODE:错误报告。   PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //加combinword字段 START
    $add_filed = 'word_sort';
    $add_filed_sql = "alter table report add {$add_filed} TEXT(32)";
    try {
      $db->beginTransaction();//启动事务
      $db->exec($add_filed_sql);  //加字段
      $db->commit();//提交事务
    }catch(PDOException $e){
      //$e->getMessage();//获取错误信息。
      echo '字段已经存在'.PHP_EOL;
      $db->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
    }
    //加combinword字段 END
    $addStep = 5000;  //每次操作的数据
    $word_cnt = 0;
    $succ_cnt = 0;
    $sort = 0;
    $total = count($data);
    for ( $x=0; $x<$total; $x += $addStep ){
      $temp_json = array_slice($data, $x, $addStep);  //批量操作 100条
      $temp_json = array_column( $temp_json, "title" );
      $temp_json = array_unique($temp_json);
      $temp_str = $this->getStrByArr($temp_json);
      $temp_sql = "select * from report where words IN ({$temp_str})";
      $res = $db->query($temp_sql);
      $result = $res->fetchAll(PDO::FETCH_ASSOC);  //获取数组结果集
      $words_result = array_column($result, 'words'); //结果去重
      $unique_result = array_unique($words_result);
      //var_export($unique_result);die;
      //批量更新 START
      $update_sql = "UPDATE report SET {$add_filed} = CASE words ";
      foreach ($unique_result as $k => $v){
        $updateValue = $v;
        $update_sql .= " WHEN '{$updateValue}' THEN ".$sort++;
      }
      $sort += count($unique_result);  //加上排序字段
      $update_sql_str = $this->getStrByArr( $unique_result );
      $update_sql .= " END WHERE words IN ({$update_sql_str})";
        //var_export($update_sql);die;
      try {
        $db->beginTransaction();//启动事务
        $cnt = $db->exec($update_sql);  //加字段
        $db->commit();//提交事务
        $word_cnt += count($result);
        $succ_cnt += $cnt;
        echo "更新了[{".count($result)."}]个关键字,共影响了[{$cnt}]条数据 ".PHP_EOL;
      }catch(PDOException $e){
        //$e->getMessage();//获取错误信息。
        echo "批量更新失败 ".PHP_EOL;
        $db->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
      }
      //批量更新END
    }
    echo "一共更新了[{$word_cnt}]个关键字,共影响了[{$succ_cnt}]条数据 ".PHP_EOL;
    die;
  }
  /**
   * @todo 根据数组返回拼接的字符串
   * @param unknown $temp_json 数组
   * @return string 字符串
   */
  function getStrByArr($temp_json){
    $temp_str = '';
    $count = count($temp_json);
    $lastValue = end($temp_json);//var_export($lastValue);die;  //获取数组最后一个元素
    foreach ($temp_json as $k => $v){
      $next_str = '';
      if($v != $lastValue ){  //不是最后一个
        $next_str = ',';
      }else{
        $next_str = '';
      }
      $temp_str .= "'".$v."'{$next_str}";
    }
    return $temp_str;
  }
  /**
   * @todo 获取json数据
   */
  public function getjson(){
    $filename = APP_PATH.'/data/combinword/jsonlist.json';
    $json = file_get_contents($filename);
    $array = json_decode($json, true);
    return $array;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
第七节 类的静态成员 [7]
Oct 09 PHP
php基础知识:控制结构
Dec 13 PHP
PR值查询 | PageRank 查询
Dec 20 PHP
PHP 操作文件的一些FAQ总结
Feb 12 PHP
二招解决php乱码问题
Mar 25 PHP
浅谈discuz密码加密的方式
May 22 PHP
PHP中比较时间大小实例
Aug 21 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
PHP发送短信代码分享
Aug 11 PHP
Laravel中间件实现原理详解
Oct 09 PHP
php函数式编程简单示例
Aug 08 PHP
php使用fullcalendar日历插件详解
Mar 06 #PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 #PHP
浅谈PHP封装CURL
Mar 06 #PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 #PHP
PHP实现的敏感词过滤方法示例
Mar 06 #PHP
详解PHP 二维数组排序保持键名不变
Mar 06 #PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 #PHP
You might like
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
一个用php3编写的简单计数器
2006/10/09 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
python中bisect模块用法实例
2014/09/25 Python
Python标准库os.path包、glob包使用实例
2014/11/25 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
学生处主任岗位职责
2013/12/01 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
党员个人承诺书
2015/04/27 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
网吧管理制度范本
2015/08/05 职场文书