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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
二招解决php乱码问题
Mar 25 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
微信支付开发告警通知实例
Jul 12 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
laravel请求参数校验方法
Oct 10 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
nginx下安装php7+php5
2016/07/31 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
Python pandas如何向excel添加数据
2020/05/22 Python
python 爬取小说并下载的示例
2020/12/07 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
助人为乐表扬信范文
2014/01/14 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
服务质量承诺书
2014/03/27 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python