发布于2023-11-29 20:02 阅读(707) 评论(0) 点赞(27) 收藏(5)
我尝试将数据插入到 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 (或您正在使用的任何内容)。然而这也有其缺点。它可能会导致您大量使用反射。为什么?如果您想在运行时更改表,我必须假设您不知道需要什么样的对象。这会导致您“即时”创建这些对象。这也表明您应该以某种方式存储对象名称。
第二个答案提出了一个问题。您如何从该数据库中读取内容?
如果您动态读取该数据库(即以编程方式定义您将需要哪些列):您如何知道要读取哪些列?什么可以确保这些列会存在?您必须检查您请求的列是否存在。这可能很快就会变得混乱,因为您必须检查每一列。如果它确实存在,但未设置,那么它的默认值是什么?
如果您静态读取该数据库:为什么不预先设计数据库来保存 kWh 列?在某些时候它可能为空,但您可以通过忽略它们来弥补这一点。
如果您事先知道要使用的对象,请设计您的数据库以能够容纳它。
或者还有其他更好的方法吗?
您可能会很乐意使用关系数据库并通过数据访问对象抽象这些数据库。即使这个答案深入到设计方面,您最好还是先设计您的应用程序。继续创建一个EER 图,它代表您的数据结构。您可以拥有一个通用汽车实体,由巡逻车和电动汽车(甚至融合汽车)扩展。有很多工具可以帮助您创建这样的图表并将其转换为您选择的数据库的 DDL。
具体来说,如果您确实必须在运行时更改表,我建议采用第二种方法并为其添加默认值。然而,根据你提出的问题,我真的看不出你能走得太远。这意味着您将有一个想要存储的未知对象。
如果是这种情况,为什么不使用对象名称创建一个新表,将对象的字段作为列保存?这将允许您拥有像这样的访问权限(假设存储所述对象的存储库):
$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.
}
它有一个很大的优点,即您只需检查表是否存在,并(如果是)创建一个新对象或(如果不存在)抛出异常。
当然,这会带来更多问题。为了简单起见,这里没有进行错误处理(例如,名称空间会发生什么情况,如果有更多同名对象会发生什么情况)。但这应该能够说明这一点。
很抱歉这篇文章很长,祝你有美好的一天:)
作者:黑洞官方问答小能手
链接:http://www.phpheidong.com/blog/article/550173/1fb09c3a76dace0bb560/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!