PHP OOPs动态插入更新删除数据

PHP OOPs动态插入更新删除数据,php,mysql,sql,forms,oop,Php,Mysql,Sql,Forms,Oop,我对PHP中的OOPs不是很熟悉。只是从网络上得到一些简单的经验,我尝试创建一个类来动态插入、删除、更新、将数据从表单上传到数据库表 我不确定它是否真的是面向对象的。。任何人都可以帮我找到错误,或者只是让它变得更好 要使用此类…以下是一些规则或必要性: 1.表单中的字段应与数据库中的字段同名。。 2.“提交”按钮的名称应与表单将要插入数据的表的名称相同。 3.表单(表)中的任何字段都不应与数据库中任何表的字段同名。(提交按钮除外) 要插入,请使用函数INSERTDB。。 和 如果有图像上传,请使

我对PHP中的OOPs不是很熟悉。只是从网络上得到一些简单的经验,我尝试创建一个类来动态插入、删除、更新、将数据从表单上传到数据库表

我不确定它是否真的是面向对象的。。任何人都可以帮我找到错误,或者只是让它变得更好

要使用此类…以下是一些规则或必要性: 1.表单中的字段应与数据库中的字段同名。。 2.“提交”按钮的名称应与表单将要插入数据的表的名称相同。 3.表单(表)中的任何字段都不应与数据库中任何表的字段同名。(提交按钮除外)

要插入,请使用函数INSERTDB。。 和 如果有图像上传,请使用IMAG

代码如下:

db.class.php

前言
你在正确的轨道上,但你只走了一半。您必须先格式化数据,然后才能将任何内容插入数据库

这意味着您必须将$\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;
}