PHP OOPs动态插入更新删除数据
我对PHP中的OOPs不是很熟悉。只是从网络上得到一些简单的经验,我尝试创建一个类来动态插入、删除、更新、将数据从表单上传到数据库表 我不确定它是否真的是面向对象的。。任何人都可以帮我找到错误,或者只是让它变得更好 要使用此类…以下是一些规则或必要性: 1.表单中的字段应与数据库中的字段同名。。 2.“提交”按钮的名称应与表单将要插入数据的表的名称相同。 3.表单(表)中的任何字段都不应与数据库中任何表的字段同名。(提交按钮除外) 要插入,请使用函数INSERTDB。。 和 如果有图像上传,请使用IMAG 代码如下: db.class.phpPHP OOPs动态插入更新删除数据,php,mysql,sql,forms,oop,Php,Mysql,Sql,Forms,Oop,我对PHP中的OOPs不是很熟悉。只是从网络上得到一些简单的经验,我尝试创建一个类来动态插入、删除、更新、将数据从表单上传到数据库表 我不确定它是否真的是面向对象的。。任何人都可以帮我找到错误,或者只是让它变得更好 要使用此类…以下是一些规则或必要性: 1.表单中的字段应与数据库中的字段同名。。 2.“提交”按钮的名称应与表单将要插入数据的表的名称相同。 3.表单(表)中的任何字段都不应与数据库中任何表的字段同名。(提交按钮除外) 要插入,请使用函数INSERTDB。。 和 如果有图像上传,请使
前言
你在正确的轨道上,但你只走了一半。您必须先格式化数据,然后才能将任何内容插入数据库
这意味着您必须将$\u POST值映射到数组$字段
和$值
,前者是数据库列,后者是要插入的数据
insert()
方法接受3个输入<代码>$tb
$field
和$value
$tb
很容易,因为它是一个字符串$field
和$value
最有可能是数组,具体取决于您的表结构。即使您的表只包含一列,最好还是使用数组。使用数组有两种语法。第一种是[]
(仅在较新的php安装上受支持),以及较旧但更受支持的“array()”方法
解决问题
在代码中,您错误地使用了insertdb
方法,该方法仅适用于与post字段具有相同列名的表。否则,此方法将不起作用。相反,您应该专注于使用insert()
方法,并正确映射值
假设您有一个这样的表结构
TABLE user_info
user_name (VARCHAR(25)
pass_word VARCHAR(255)
user_id PRIMARY, AI INT(11)
如您所见,要成功插入,必须为user\u name
和pass\u word
提供值,而user\u id
是您的主要索引,并将自动递增
现在,假设你有一个这样的帖子
$username = $_POST['user'];
$password = $_POST['pass'];
知道了这一点,我们必须以某种方式将这些信息映射到我们的数据库
普雷斯托!我们可以这样绘制它们的地图
$tb = 'user_info';
$field = ['user_name','pass_word'];
$value = [$username,$password];
现在,我们已经具备了插入db类的所有先决条件
$o->insert($tb,$field,$value);
现在很乱。你需要更多的抽象来真正实现这个OO。我会将连接内容粘贴到另一个文件中,然后将其转换为可调用对象 我这是什么意思?好的,通过在每个函数中返回$this,可以将整个文件作为对象返回。例如,让我们看一个where函数
//Db would hold your connection details and connect to the DB
class Query_Builder extends Db {
//Declare your instance variables here, we are just doing where for the purposes of this
protected $_where;
public function where($column, $field)
{
//Encaps in single quotes
$encapsField = '\'' . $field . '\'';
$newWhere = str_replace('?', $encapsField, $column);
$this->_where = 'WHERE ' . $newWhere;
return $this;
}
注意:函数不需要public,因为它是隐式声明的,但始终显式声明函数被认为是良好的实践
此函数将返回$This->(其中设置为'where
id
='1';')。使用此方法,您可以通过重复此过程来构建整个查询。这是一个更加面向对象的设计,它将为您提供良好的基础,以扩展您的类以合并这些设计模式。当有很多类似的或已经过现场验证的ORM时,您为什么要编写自己的ORM?您不顾后果地忽略数据库占位符,这将给您带来严重损失。如果你从学术的角度来学习更多的面向对象编程,那很好,但是在开发自己的实现之前,你可能想先研究其他的实现。。我试图在OOPS在线上搜索一些彻底的方法…但找不到它,或者我发现的任何东西都从我的头上飞过。。所以我只是从这里和那里收集一些信息,把它们结合起来,我希望我很快就会走上正轨。。。如果你有任何关于OOPs教程的好链接,请发布它们:)大多数“教程”都是垃圾,不值得一读。了解这些工作原理的最好方法是阅读使用适当OO设计原则的应用程序的源代码,并探索构建软件时使用的各种方法。我对数组不太熟悉,所以我决定创建一个字段和值字符串,然后插入。。。函数insert主要用于插入。。。Insertdb用于生成“字段”和“值”字符串。。。首先,我使用了insert函数..对于包含两列的表来说,这是可以的..(主键,我的必选列)..,但当表有两列以上时,我需要使用insert DB。。因为INSERT将把内容放在不同的行中……我刚刚在上面的示例中向您展示了如何创建数组。
$o->insert($tb,$field,$value);
//Db would hold your connection details and connect to the DB
class Query_Builder extends Db {
//Declare your instance variables here, we are just doing where for the purposes of this
protected $_where;
public function where($column, $field)
{
//Encaps in single quotes
$encapsField = '\'' . $field . '\'';
$newWhere = str_replace('?', $encapsField, $column);
$this->_where = 'WHERE ' . $newWhere;
return $this;
}