当前位置: 首页 > 知识库问答 >
问题:

如何使用php动态地将参数插入到mySQL数据库中?

鲁钱明
2023-03-14

我尝试将数据插入mySQL表,但我还不知道会有多少参数。

所以我需要找到一种方法,如何动态插入参数。

你可以这样做:

Insert into mytable (parameters) VALUES ('Ford;red;100kW;diesel;');
Insert into mytable (parameters) VALUES ('Ford;red;100kW;electric;40kWH');

因此,如果你必须增加一辆电动汽车,你需要千瓦时,而汽油车不需要千瓦时。

或者你这样做:

Insert into mytable(name, color, kW, engine) VALUES ('Ford', 'red', '100', 'diesel')

ALTER TABLE mytable ADD kWh VARCHAR( 255 ) after engine

Insert into mytable(name, color, kW, engine, kWh) VALUES ('Ford', 'red', '100', 'electric', '40')

在第一种情况下,您必须使用诸如explode之类的字符串操作处理所有数据,在第二种情况下,您必须允许用户使用php添加列。

更好的方法是什么?或者还有其他更好的方法吗?

我看不出与另一个问题有任何相似之处。

共有1个答案

林曦之
2023-03-14

这是一个非常复杂的问题。我希望我理解正确。

这是一篇很长的文章,可能包含错误。请随意更正或要求澄清。这也是(由于问题的性质)某种程度上的反对。我试图平衡所有的可能性。

我假设使用对象或定向方法来实现此目的,即应该存储该对象。

TL;DR:最好不要以编程的方式来做这件事。

第一个答案有一个优点,你可以在运行时分割文本并动态地创建一个新的对象,这不会导致PDOExcense(或者你正在使用的任何东西)。然而,这也有它的缺点。它会导致你大量使用反射。为什么啊?如果你想在运行时改变表,我必须假设你不知道什么样的对象是预期的。这导致你“在飞行中”创建这些对象。这也表明,您应该以某种方式存储对象名称。

答案提出了一个问题。你如何从数据库中读取数据?

如果动态读取该数据库(即通过编程定义需要哪些列):如何知道从哪些列读取?是什么确保了这些列的存在?您必须检查您请求的列是否存在。这可能会很快变得混乱,因为您必须检查每个列。如果它确实存在,但没有设置,那么它的默认值是什么?

如果静态读取该数据库:为什么不事先设计数据库以保存kWh列?它可能在某个时候是空的,但是你可以通过忽略它们来补偿它。

如果事先知道要使用的对象,请将数据库设计为能够容纳它。

还是有其他更好的方法?

您可能会乐于使用关系数据库,并使用数据访问对象构建这些数据库。即使这个答案深入到设计方面,您也可以先设计应用程序。继续创建一个EER图,它表示您的数据结构。您可以有一个通用的汽车实体,它由巡逻车和电动汽车(甚至是融合车)扩展。有很多工具可以帮助您创建这样的图,并将其转换为所选数据库的DDL。

具体来说,如果你真的必须在运行时修改表,我建议采用第二种方法,并为其添加默认值。然而,根据你问的问题,我真的看不出你能走多远。这意味着你将有一个未知的对象,你想存储。

如果是这样的话,为什么不创建一个具有对象名称的新表,将对象的字段作为列保存?这将允许您拥有如下访问权限(创建存储所述对象的存储库):

$object = new TestObject();
repository->store($object);

调用存储库时-

$object = $repository->load("TestObject");

存储库现在将检查列TestObject,并可能在运行时创建一个新的TestObject,如下所示:

function load($name) {
    $returnValue = new $name;
    // Set the fields based on the database entries.
}

它有一个很大的优势,你只需要检查表是否存在,并且(如果是)创建一个新的对象或者(如果不是)抛出一个异常。

当然,这会带来更多的问题。这里不做错误处理(例如,名称空间会发生什么,如果有更多同名的对象会发生什么),以保持简单。但这应该会使这一点相悖。

对不起,长的帖子,有一个美好的一天:)

 类似资料:
  • 问题内容: 当前,当通过print_r()输出时,我有一个类似于以下内容的数组; 我想将此数据插入到一个表中,每个元素值都属于其各自的字段。 目前,我的php代码如下所示 注意:R_ID不是此表中的主键。 有人可以帮助我了解如何应对这种情况吗?感谢您的阅读和帮助! 问候。 问题答案: 我会避免对每个条目进行查询。

  • 问题内容: 我有以下要存储在数据库中的数组… 我试图搜索谷歌上如何做到这一点,我所能找到的是表明插入数组之前需要对数组进行拆分的信息。它是否正确?抱歉,天真,对于php来说还很陌生。 问题答案: 您不能直接将数组插入 mysql, 因为 mysql 无法 识别php 数据类型。 Mysql 只了解 SQL 。因此,要将数组插入mysql数据库,必须将其转换为sql语句。可以手动或通过库来完成。输出

  • 我是mysql和php的初学者。在这个问题上陷入了困境。不知道问题出在哪里。但是如果我直接执行insert查询,它就会被执行,而如果我从用户那里接受它,它就不会被执行(代码中显示了这一点)。可能问题出在我用来检索用户提交的值的$\u POST[]方法上。我已经提交了两个代码,addbooks。php(用户提交值的表单)和add。php(插入数据库)。

  • 问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;

  • 问题内容: 从Python脚本向MySQL插入一些数据时,出现一个奇怪的错误。这基本上与我要插入的变量为空有关。我认为MySQL不喜欢空白变量,但是还有其他我可以将其更改为可以与我的insert语句一起使用的东西吗? 我可以成功地使用一条语句将其设置为0(如果为空),但这可能会弄乱我计划稍后在MySQL中进行的某些数据分析。有没有办法将其转换为或某种方式,以便MySQL接受但不添加任何内容? 问题

  • 我正在尝试通过我的应用程序将数据插入Google Cloud mysql数据库,该应用程序是通过eclipse构建在java上的。这是代码: 部署项目后,我遇到以下错误: java.sql.SQLException:没有找到适合jdbc: mysql://google/eduvitae? cloud dSqlInstance=edu-vitae1的驱动程序 谁能帮我解决这个问题。提前谢谢