我想使用PHP OOP创建一个简单的CRUD而不需要任何框架
下面是我编写的执行简单SQL更新查询的代码
function Update_data($table_name,$new_columns_values,$where,$new_value){
try{
$columns ='';
$columns_updatadata='';
foreach($new_columns_values as $key => $values){
$columns_updatadata .= $key . "=" ."'" .$values."'". ",";
}
$columns_updatadata =rtrim($columns_updatadata, ",");
$Statement = $this->pdo->prepare("UPDATE $table_name SET $columns_updatadata WHERE $where = '$new_value'");
return $Statement->execute();
}
catch(Exception $e) {
echo 'Exception -> ';
var_dump($e->getMessage());
}
}
呼叫更新功能
Update_data("Member_Table", array("Name"=>"Peter", "Gender"=>"M"),"id","33");
//equal to
$this->pdo->prepare("UPDATE Member_Table SET Name = 'Peter',Gender = 'M' WHERE id = '33'");
但是你知道如何在oop更新查询中处理和
吗?
如
$this->pdo->prepare("UPDATE Member_Table SET Name = 'Peter',Gender = 'M' WHERE id = '33' AND Something ='22'");
还是多个添加和
?
..... WHERE id = '33' AND Something2 ='22' AND Something3 ='33'.....AND Something9999='value'");
请看一下我的代码注释,了解一下我的头绪在哪里。
如果有人能用简单的术语解释这一点,我需要做什么来改变它??
这会帮我的忙。
非常感谢
正如在注释中提到的,我建议使用composer使用Docition包,而不是尝试为QueryBuilder重新设计轮子。然而,这是一个有趣的查询构建器问题,所以我正在进行我的尝试。
$Where
需要是多个AND条件的数组数组,由OR分隔。每个单独的子数组都需要有列名作为键和值作为要更新的实际值。
如果提供给您的$where
恰好是空数组,您可以/需要引发异常,因为您不应该允许没有wheres的更新。
因此,您的函数定义将更改为:
function Update_data($table_name,$new_columns_values,$where = array());
下面是我们构建where条件和put占位符?
的片段,其中需要插入值,并在execute()
期间提供这些值。
<?php
function Update_data($table_name,$new_columns_values,$where = array()){
try{
if(count($where) == 0){
throw new \Exception('Missing where condition for UPDATE statement.');// to make it more secure
}
$columns = '';
$columns_updatadata = '';
foreach($new_columns_values as $key => $values){
$columns_updatadata .= $key . "=" ."'" .$values."'". ",";
}
$columns_updatadata = rtrim($columns_updatadata, ",");
/* build the where condition. */
$where_sql = [];
$placeholder_values = [];
foreach($where as $conditions){
$conds = [];
foreach($conditions as $column => $column_value){
$conds[] = "$column = ?";
$placeholder_values[] = $column_value;
}
$where_sql[] = implode(" and ",$conds);
}
$where_sql = "(" . implode(" ) OR ( ",$where_sql) . ")";
/* building the where condition ends. */
$Statement = $this->pdo->prepare("UPDATE $table_name SET $columns_updatadata WHERE $where_sql");
return $Statement->execute($placeholder_values);
}catch(\Exception $e) {
echo 'Exception -> ';
var_dump($e->getMessage());
}
}
您可以稍后调用该方法,如下所示:
Update_data("Member_Table", array("Name"=>"Peter", "Gender"=>"M"),[['id' => '33'],['name' => 'David','username' => 'nice_dev']]);
上面数组中表示的where
条件如下:
[
[
'id' => '33'
],
[
'name' => 'David',
'username' => 'nice_dev'
]
]
它将原始SQL形成为(id=?)或(name=?和username=?)
注意:最好也为要更新的列添加占位符,但我将此留给您作为练习。
问题内容: 谁能帮助我了解为什么此更新查询未更新数据库中的字段?我在我的php页面中有这个来从数据库中检索当前值: 这是我的HTML表单: 这是我的“ editblogscript”: 我不明白为什么它不起作用。 问题答案: 您必须在查询中的所有VARCHAR内容周围加上单引号。因此,您的更新查询应为: 同样,用POST中的内容直接更新数据库是一种不好的形式。您应该使用mysql_real_esc
基础Spring Data repository内置的查询生成器机制对于创建实体仓库的约束查询是有用的,它会从方法名中去掉find…By,read…By,query…By,count…By和get…By这些前缀并解析剩下的内容.这些前缀还能包含更多的表达式例如Distinct,设置一个distinct标志并在查询中创建它,然后第一个By的动作就像一个分隔符来表明查询实际标准的开始。最基本的方式你可
问题内容: 我有一个html表,可将mySQL数据库表中的所有内容加载。我有与该mySQL表的列相关的下拉菜单-当用户选择下拉菜单之一时,它将使用AJAX查询数据库。 我需要弄清楚如何动态构建查询,因为有时下拉列表将为空(即,它们不想按该列进行过滤)。 做这个的最好方式是什么? 目前我有这样的事情: 您可以想象这是行不通的,因为如果这些字段中的任何一个为空,查询都会失败(或者不返回任何内容)。 显
问题内容: 我正在尝试根据用户输入创建动态搜索查询。 用户可以不填写任何,部分或全部字段。 该查询在表中搜索符合所有要求的记录。 现在,我已经完成了研究,并且发现了执行此操作的多种方法。但是它们都不起作用,如果起作用了,那么它们就不可行了。 试图: 目前,我正在创建这样的查询: 该查询有效,但前提是您填写了所有字段。 我是从stackoverflow文章中得到的,我再也找不到了,它说: 如果用户已
问题内容: 我必须更新一个值,该值由3个表的联接返回。 例子: 我想用其他在上述条件下加入的值来更新表的字段值。 如何在MS SQL Server中执行此操作? 问题答案: 为了清楚起见…该子句可以引用该子句中指定的表别名。所以在这种情况下是有效的 通用示例
问题内容: 我正在使用 Elasticsearch 2.3 和 官方php驱动程序 。该 updateByQuery 是给我的烦恼在PHP中使用。对于如何使用它的一些帮助将不胜感激。 基本上我想更新几个与某个查询匹配的 文档 字段(名称,价格) 谢谢。 问题答案: 因此,借助CURL api的工作原理,我设法提出了一种方法。 首先,您需要编辑您的脚本以允许脚本。最后添加以下几行。 之后,您可以开始