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

标签 php mysql

我尝试将数据插入 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')

在第一种情况下,您必须使用像爆炸这样的字符串操作来处理所有数据,在第二种情况下,您必须允许用户使用 php 添加列。

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

我看不出与其他问题有任何相似之处。

最佳答案

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

免责声明

这篇文章很长,可能有错误。随时纠正这些或要求澄清。它也(由于问题的性质)有点基于意见。我试图平衡所有的可能性。

我采用了面向对象的方法,即应该存储该对象。

TL;DR:最好不要以编程方式执行此操作。

评价

第一个答案的优点是,您可以在运行时拆分文本并动态创建一个新对象,这不会导致 PDOException(或您正在使用的任何内容)。然而,这也有它的缺点。它会导致你经常使用反射。为什么?如果您想在运行时更改表,我必须假设您不知道需要什么样的对象。这导致您“即时”创建这些对象。这也表明,您应该以某种方式存储对象名称。

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

如果您动态读取该数据库(即以编程方式定义您将需要哪些列):您如何知道要读取哪些列?是什么确保这些列将存在?你必须 check that the column you request exists .这可能会很快变得困惑,因为您必须检查每一列。如果它确实存在但未设置,那么它的默认值是多少?

如果您静态读取该数据库:为什么不预先设计数据库以保存 kWh 列?它在某些时候可能为空,但您可以通过忽略它们来弥补这一点。

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

解决这个问题的另一种方法

Or is there another way that is even better?

您可能会乐于使用 Relational Databases并用 Data Access Object 构造那些.即使这个答案深入到设计方面,您也可以先设计您的应用程序。继续创建一个 EER-Diagram ,代表您的数据结构。你可以有一个通用的汽车实体,由巡逻车和电动车(甚至是融合车)扩展。有很多工具可以帮助您创建这样的图表并将其转换为您选择的数据库的 DDL。

结论

具体来说,如果您真的必须在运行时更改表,我建议使用第二种方法和add a default value给它。但是,根据您提出的问题,我真的看不到您有什么进展。这意味着您将有一个要存储的未知对象。

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

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

调用 repository->store() 后,存储库将检查数据库是否有名为“TestObject”的表,如果没有,则创建它。如果表已创建,则它可以继续更改它并添加列。因此,以下将使用它:

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

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

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

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

当然这会带来更多问题。这里没有进行错误处理(例如,命名空间会发生什么,如果有更多同名对象会发生什么),以保持简单。但这应该能说明问题。

抱歉发了这么长的帖子,祝你有美好的一天:)

关于php - 如何使用 php 将参数动态插入 mySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877672/

相关文章:

php - 触发单个查询来获取网格分页的记录

mysql可以本地连接,但只能远程连接

php - 如何将 If then 语句放入 php 中的 mysql_fetch_array() 语句中

mysql - 如何在mysql中选择(select ...)的char_length

php - 为什么 laravel 路由必须有优先顺序,否则找不到页面?

php - 是否可以在 Flash 中设置与浏览器中使用的相同的 cookie

javascript - 使用CSS在ajax中聊天div

PHP 将文件重命名为该 sql id

php - 触发器删除表,然后用 Mysql 插入值

php - 为什么我的模型只传递单行而不是所有行?