mysql使用pdo简单封装select语句
最终代码:
function pdo_array_query($pdo, $table_name, $data, $fields=array('*')){
//Will contain SQL snippets.
$rows_sql = array();
//Will contain the values that we need to bind.
$to_bind = array();
//Get a list of column names to use in the SQL statement.
$codition_array = array();
$codition_string = "";
foreach($data as $column_name => $column_value){
$codition_array[] = $column_name.' = :'.$column_name;
$param = ":" . $column_name;
$to_bind[$param] = $column_value;
}
$codition_string = implode(" and ", $codition_array);
$fields_string = implode(", ", $fields);
$sql = "SELECT $fields_string FROM `$table_name` WHERE ".$codition_string;
//Prepare our PDO statement.
$pdo_statement = $pdo->prepare($sql);
foreach($to_bind as $param => $val){
$pdo_statement->bindValue($param, $val);
}
// return $pdo_statement->execute();
$pdo_statement->execute();
$result = $pdo_statement->fetchAll();
return $result;
//print_r($result);
}
用法:
$pdo = get_mysql_connect(); // 自定义 获取pdo实例的方法
$table_name = 'order'; // 表名
$fields = array("idproduct", "email", "customer", "address");// 需要查询的字段
$data = array(
"idpayment"=>"1270117360-13027-963488",
"name"=>"John",
"age"=>"28",
"sex"=>"boy",
); // 查询的条件
pdo_array_query($pdo, $table_name, $data, $fields);
拼合后的 sql 如下:
SELECT idproduct, email, customer, address FROM `order` WHERE idpayment = :idpayment and name = :name and age = :age and sex = :sex
升级版:
由于上面的方法,只能处理条件为 and 的情况,所以新方法增加了能添加 逻辑数组的 参数,具体代码如下:
function pdo_array_query($pdo, $table_name, $data, $fields=array('*'), $operators=array('and')){
//Will contain SQL snippets.
$rows_sql = array();
//Will contain the values that we need to bind.
$to_bind = array();
//Get a list of column names to use in the SQL statement.
$condition_array = array();
$condition_string = "";
foreach($data as $column_name => $column_value){
$condition_array[] = $column_name.' = :'.$column_name;
$param = ":" . $column_name;
$to_bind[$param] = $column_value;
}
// $codition_string = implode(" and ", $codition_array);
if (count($operators) == 1 ) {
$condition_string = implode(' '.$operators[0].' ', $condition_array);
}
// the operators should less one than condition_array
else if (count($condition_array) - count($operators) == 1){
$result = cross_merge_array($condition_array, $operators);
$condition_string = implode(' ', $result);
}
$fields_string = implode(", ", $fields);
$sql = "SELECT $fields_string FROM `$table_name` WHERE ".$condition_string;
echo $sql;
//Prepare our PDO statement.
$pdo_statement = $pdo->prepare($sql);
foreach($to_bind as $param => $val){
$pdo_statement->bindValue($param, $val);
}
$pdo_statement->execute();
$result = $pdo_statement->fetchAll();
print_r($result);
//return $pdo_statement->rowCount();
}
为了合理起见,关系数组 应该是要比 字段数组 少 1,如:
idpayment = :idpayment and name = :name or age = :age and sex = :sex
关系数组是: array('and', 'or', 'and') 长度为3
字段数组是: array('idpayment', 'name', 'age', 'sex') 长度为 4 数组交叉合并的方法: 也可参考 http://www.cnblogs.com/tommy-huang/p/9050161.html
function cross_merge_array($arr1, $arr2)
{
$arr1 = array_values($arr1);
$arr2 = array_values($arr2);
$count = max(count($arr1), count($arr2));
$arr = array(); for ($i = 0; $i < $count; $i++) {
if ($i < count($arr1)) {
$arr[] = $arr1[$i];
} if ($i < count($arr2)) {
$arr[] = $arr2[$i];
}
}
return $arr;
}
用法:
$pdo = get_mysql_connect(); // 自定义 获取pdo实例的方法
$table_name = 'order'; // 表名
$fields = array("idproduct", "email", "customer", "address");// 需要查询的字段
$data = array(
"idpayment"=>"1270117360-13027-963488",
"name"=>"John",
"age"=>"28",
"sex"=>"boy",
); // 查询的条件
$operators = array(
'and',
'or',
'and',
); pdo_array_query($pdo, $table_name, $data, $fields, $operators);
mysql使用pdo简单封装select语句的更多相关文章
- MySQL的C++简单封装
/* *介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点 *作者:MrEO *日期:2016.3.26 */ 头文件 my_sql.h ...
- MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
今天遇到一个问题,有一个 Select 语句没有加 "Order By",返回的数据是不确定的. 这种问题碰到不止几次了.追根寻底, Select 语句如果不加 "Ord ...
- php web开发安全之sql注入和防范:(一)简单的select语句注入和防范
sql注入主要是指通过在get.post请求参数中构造sql语句,以修改程序运行时所执行的sql语句,从而实现获取.修改信息甚至是删除数据的目的,sql被注入的原因主要是代码编写的有问题(有漏洞),只 ...
- mysql学习之完整的select语句
本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order by limit 首发日期:2018-04-11 完整语法: 先给一下完整的语法,后面将逐一来 ...
- [ mysql优化一 ] explain解释select语句
NOSQL 没有什么数据表, 只是一些变量,key_value ,redis 支持的变量比较多.可以持久化文件到硬盘上. mysql 关系型数据库 ,表和表中间有各种id的关系. 缺点 高并发读 ...
- 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!
大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...
- mysql select语句解析
select语句用于从一个或多个数据表选出特定行.特定列的交集 最简单的select语句的语法格式如下: select column1,column2 ........ (列) from 数 ...
- MySQL游标的简单实践
Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...
- (3)一起来看下使用mybatis框架的select语句的源码执行流程吧
本文是作者原创,版权归作者所有.若要转载,请注明出处.本文以简单的select语句为例,只贴我觉得比较重要的源码,其他不重要非关键的就不贴了 主流程和insert语句差不多,这里主要讲不同的流程,前面 ...
随机推荐
- Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
出错原因:在查询整个sqlite数据库时,没有查询到 "_id" 这一列. 原来的代码是:mSQLiteDatabase.query(table_name, new String[ ...
- POJ2566 Bound Found 2017-05-25 20:05 32人阅读 评论(0) 收藏
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4056 Accepted: 1249 Spe ...
- 如果datanode连接不上namenode,导致datanode无法启动。
如果datanode连接不上namenode,导致datanode无法启动. 问题: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: j ...
- excel设定备选值
excel设定备选值 有的时候我们要人为向excel中某一列添加数据,可以通过下面的方法,为这列设定备选值. 操作方法 选中excel表格的一列,选择 数据 -- 有效性 -- 允许: 选择 序列 ...
- Tencent interview
1.常见的聚类算法 1):划分法:k-means 2):基于密度的方法: 2.EM 算法 EM算法是在概率模型中寻找参数的最大似然估计或者最大后验概率的算法,其中概率模型依赖于无法观测的隐藏变量.EM ...
- Android-Kotlin简单计算器功能
上一篇博客 Android-Kotlin-配置/入门 配置好了 AndroidStudio Kotlin 的环境: 选择包名,然后右键: 选择Class类型,会有class: 创建CounterCla ...
- [ASE][Daily Scrum]11.05
在昨天的课程之后经过讨论进行了初步的分工,并制定出了我们的一个两周计划. 尚没有和老师讨论,已经询问了时间没有收到回复,等老师那边讨论过后我会在更新这个部分. 第一阶段的目标是用户能够在一个空白的地图 ...
- caffe 训练imagenet
1.整理得到自己的数据库,并生成自己数据库的列表文件.txt 2.将数据库转成lmbp格式 3.计算图像均值 4.修改网络参数 5.得到结果 1.整理得到自己的数据库 因为前面博文提到的原因,技术水平 ...
- 【转】老左常用国内/国外VPS推荐
原文:http://www.laozuo.org 老左从使用虚拟主机到VPS,至今也用过不少的商家产品,比如在"TOP10美国虚拟主机/网站空间推荐"有分享目前和曾经使用的虚拟主机 ...
- 模拟ssh、黏包、hashlib模块
一.模拟ssh 1.subprocess模块 ipconfig -all dir subprocess模块是python从2.4版本开始引入的模块.主要用来取代 一些旧的模块方法,如os.system ...