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 相关文章推荐
杏林同学录(六)
Oct 09 PHP
如何使用PHP中的字符串函数
Nov 24 PHP
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
PHP sprintf()函数用例解析
May 18 PHP
php 团购折扣计算公式
Nov 24 PHP
php类中private属性继承问题分析
Nov 01 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
实现PHP搜索加分页
Oct 12 PHP
PHP里的$_GET数组介绍
Mar 22 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
递归列出所有文件和目录
2006/10/09 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
原生js调用json方法总结
2018/02/22 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
解决Python3中的中文字符编码的问题
2018/07/18 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python编写打字训练小程序
2019/09/26 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python绘制趋势图的示例
2020/09/17 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
房产转让协议书
2014/04/11 职场文书
就业协议书范本
2014/10/08 职场文书
2014年信用社工作总结
2014/11/25 职场文书
道德模范事迹材料
2014/12/20 职场文书
典型事迹材料范文
2014/12/29 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
Python中三种花式打印的示例详解
2022/03/19 Python