PHP pdo查询sqlite,PHP PDO 操作 sqlite数据库 案例
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数据库 案例相关推荐
- c# mysql 插入 和 查询_C#访问和操作MYSQL数据库
这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 添加引用后在你的 ...
- php pdo 查询语句,PHP PDO准备的语句-MySQL LIKE查询
我正在尝试通过php的PDO类(mysql驱动程序)进行搜索.我在MySQL客户端上使用以下查询(更改表名以保护无辜者): SELECT hs.hs_pk, hs.hs_text, hs.hs_ ...
- mysql pdo查询语句,PHP PDO准备语句 – mysql LIKE查询
这是我的第一篇文章Overflow,但我发现现有的知识体系非常有帮助.无论如何,这里是我的问题: 我试图做一个搜索通过php的PDO类(mysql驱动程序).我有以下查询使用mysql客户端(表名改为 ...
- SQLite(二): Java操作SQLite
1.SQLiteJDBC SQLite JDBC Driver 可以在这个网站下载https://bitbucket.org/xerial/sqlite-jdbc/overview,当前稳定版本sql ...
- oracle数据库查询需步骤,PLSQL操作Oracle数据库之单表查询SQL语句 看完你就知道了...
Orcale数据库作为商业级的大型关系型数据库管理系统,以其较高的安全性和强大的可移植性赢得了市场的广泛认可,而PLSQL作为操作Oracle的编程语言的最佳选择,掌握其编程原理及基本的sql操作是掌 ...
- nodejs 开启http服务 操作 mysql 数据库 案例
了解了一下 nodejs ,发现它还能连接mysql.mongoDB,连接方式还比较简便,没啥jdbc的七大步:测通看一下: 代码稀烂,不过能跑通看下结果 首先数据库整点测试数据 /* Navicat ...
- 学习记录:VB.NET.操作ACCESS数据库
从98年到现在,VB6使用了20多年,真的舍不得扔掉,但是随着新计算机预装操作系统的版本越来越高,做好的安装包在安装时遇到的问题越来越多,无奈之下只能转向使用VB.NET了.安装了VS2005来学习, ...
- GROM操作mysql数据库
目录 GROM操作mysql数据库 Gorm官方文档 GROM连接数据库 创建 查询 修改 删除 GROM操作mysql数据库 Gorm官方文档 GROM连接数据库 dsn := "root ...
- 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like...
目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据 五.查询数据 六.删除数据 七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...
最新文章
- react 统一字段验证_如何使用React的受控输入进行即时表单字段验证
- 【笔试面试考试】C++基础知识点[转]
- RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
- MongoDB 权限
- 计算机管理档案有什么好处,利用资料管理系统管理档案有什么好处
- 理论基础 —— 查找 —— 平衡二叉树
- 推荐系统和搜索引擎的关系
- docker删除私有仓库中的镜像
- Soft Bellman Equation and Soft Value Iteration证明
- python 科研统计_Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列!(二)...
- 计算机科学概论:计算机科学中的百科全书
- 军工产品元器件筛选标准,军用品测试实验室
- 微信域名防封、域名检测接口api、域名跳转技术、360防拦截揭秘(一)------域名防封的核心技术
- GBT 31000-2015 社会治安综合治理基础数据规范 数据项 编码
- 数论进阶——莫比乌斯反演
- python爬网站信息_一个爬取实习僧网站信息的爬虫
- Linux 只查找两层备份目录文件大小
- 振动数据 自相关计算时时延_振动诊断技术
- html中怎么让text不换行,css如何让文本不换行?
- javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板