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
表字段idwordstime
求:
把从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框架):
getjson();//获取json数据 $dbfile_path=APP_PATH.'/data/combinword/20180824.db'; $db=newPDO("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="altertablereportadd{$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*fromreportwherewordsIN({$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="UPDATEreportSET{$add_filed}=CASEwords"; foreach($unique_resultas$k=>$v){ $updateValue=$v; $update_sql.="WHEN'{$updateValue}'THEN".$sort++; } $sort+=count($unique_result);//加上排序字段 $update_sql_str=$this->getStrByArr($unique_result); $update_sql.="ENDWHEREwordsIN({$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根据数组返回拼接的字符串 *@paramunknown$temp_json数组 *@returnstring字符串 */ functiongetStrByArr($temp_json){ $temp_str=''; $count=count($temp_json); $lastValue=end($temp_json);//var_export($lastValue);die;//获取数组最后一个元素 foreach($temp_jsonas$k=>$v){ $next_str=''; if($v!=$lastValue){//不是最后一个 $next_str=','; }else{ $next_str=''; } $temp_str.="'".$v."'{$next_str}"; } return$temp_str; } /** *@todo获取json数据 */ publicfunctiongetjson(){ $filename=APP_PATH.'/data/combinword/jsonlist.json'; $json=file_get_contents($filename); $array=json_decode($json,true); return$array; } }
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+Oracle数据库程序设计技巧总结》、《PHP+MongoDB数据库操作技巧大全》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。