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 相关文章推荐
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
php命令行写shell实例详解
Jul 19 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
laravel 解决Validator使用中出现的问题
Oct 25 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
express express-session的使用小结
2018/12/12 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
python中 logging的使用详解
2017/10/25 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
西雅图的买手店:Totokaelo
2019/10/19 全球购物
《鱼游到了纸上》教学反思
2014/02/20 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
品德与社会教学反思
2016/02/24 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
如何优化vue打包文件过大
2022/04/13 Vue.js