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 相关文章推荐
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php一个找二层目录的小东东
Aug 02 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
php学习笔记之面向对象
Nov 08 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
PHP 采集心得技巧
2009/05/15 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
js创建数组的简单方法
2016/07/27 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python爬取国外天气预报网站的方法
2015/07/10 Python
python之Character string(实例讲解)
2017/09/25 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python redis存入字典序列化存储教程
2020/07/16 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
骨干教师事迹材料
2014/12/17 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL