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字段

思路:

0、获取jsonlist.json文件内容并json_decode($str,true)转为二维数组

1、连接sqlite表

2、try{}catch(){} 给表增加 word_sort字段

3、把json文件中的数据数组化

4、每次循环5000条json数据,用 IN 在report表中查询(title字段需要拼接)

5、把查询出来的数据用 sql的批量跟新语句拼接

6、try{}catch(){}批量更新report表数据

7、echo输出运行结果

2、PHP代码(yaf框架):

/**

* @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

$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 pdo查询sqlite,PHP PDO 操作 sqlite数据库 案例相关推荐

  1. c# mysql 插入 和 查询_C#访问和操作MYSQL数据库

    这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 添加引用后在你的 ...

  2. php pdo 查询语句,PHP PDO准备的语句-MySQL LIKE查询

    我正在尝试通过php的PDO类(mysql驱动程序)进行搜索.我在MySQL客户端上使用以下查询(更改表名以保护无辜者): SELECT    hs.hs_pk, hs.hs_text, hs.hs_ ...

  3. mysql pdo查询语句,PHP PDO准备语句 – mysql LIKE查询

    这是我的第一篇文章Overflow,但我发现现有的知识体系非常有帮助.无论如何,这里是我的问题: 我试图做一个搜索通过php的PDO类(mysql驱动程序).我有以下查询使用mysql客户端(表名改为 ...

  4. SQLite(二): Java操作SQLite

    1.SQLiteJDBC SQLite JDBC Driver 可以在这个网站下载https://bitbucket.org/xerial/sqlite-jdbc/overview,当前稳定版本sql ...

  5. oracle数据库查询需步骤,PLSQL操作Oracle数据库之单表查询SQL语句 看完你就知道了...

    Orcale数据库作为商业级的大型关系型数据库管理系统,以其较高的安全性和强大的可移植性赢得了市场的广泛认可,而PLSQL作为操作Oracle的编程语言的最佳选择,掌握其编程原理及基本的sql操作是掌 ...

  6. nodejs 开启http服务 操作 mysql 数据库 案例

    了解了一下 nodejs ,发现它还能连接mysql.mongoDB,连接方式还比较简便,没啥jdbc的七大步:测通看一下: 代码稀烂,不过能跑通看下结果 首先数据库整点测试数据 /* Navicat ...

  7. 学习记录:VB.NET.操作ACCESS数据库

    从98年到现在,VB6使用了20多年,真的舍不得扔掉,但是随着新计算机预装操作系统的版本越来越高,做好的安装包在安装时遇到的问题越来越多,无奈之下只能转向使用VB.NET了.安装了VS2005来学习, ...

  8. GROM操作mysql数据库

    目录 GROM操作mysql数据库 Gorm官方文档 GROM连接数据库 创建 查询 修改 删除 GROM操作mysql数据库 Gorm官方文档 GROM连接数据库 dsn := "root ...

  9. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like...

    目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据  五.查询数据  六.删除数据  七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...

最新文章

  1. react 统一字段验证_如何使用React的受控输入进行即时表单字段验证
  2. 【笔试面试考试】C++基础知识点[转]
  3. RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
  4. MongoDB 权限
  5. 计算机管理档案有什么好处,利用资料管理系统管理档案有什么好处
  6. 理论基础 —— 查找 —— 平衡二叉树
  7. 推荐系统和搜索引擎的关系
  8. docker删除私有仓库中的镜像
  9. Soft Bellman Equation and Soft Value Iteration证明
  10. python 科研统计_Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列!(二)...
  11. 计算机科学概论:计算机科学中的百科全书
  12. 军工产品元器件筛选标准,军用品测试实验室
  13. 微信域名防封、域名检测接口api、域名跳转技术、360防拦截揭秘(一)------域名防封的核心技术
  14. GBT 31000-2015 社会治安综合治理基础数据规范 数据项 编码
  15. 数论进阶——莫比乌斯反演
  16. python爬网站信息_一个爬取实习僧网站信息的爬虫
  17. Linux 只查找两层备份目录文件大小
  18. 振动数据 自相关计算时时延_振动诊断技术
  19. html中怎么让text不换行,css如何让文本不换行?
  20. javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板

热门文章

  1. Speedoffice(PPT)如何设置幻灯片大小
  2. bm26 bm27 bm5
  3. 可免费编辑 PDF 内容的 7 大 PDF 编辑工具
  4. 将 Cpar 文件导入 2019 版的 Carsim 后,无法打开 video+plot 是什么问题?
  5. 计算机出现蓝屏怎么解决,电脑出现蓝屏,什么原因,怎么办?
  6. Explaining and Harnessing Adversarial Examples——论文的学习笔记01
  7. 线性表(1)普通线性表
  8. 如何设计好的RESTful API之安全性
  9. xftp无法连接到虚拟机
  10. IDEA+SSH :图书管理系统实现