Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该把我的默认设置放在哪里?_Php_Mysql - Fatal编程技术网

Php 我应该把我的默认设置放在哪里?

Php 我应该把我的默认设置放在哪里?,php,mysql,Php,Mysql,我正在开发一个web应用程序,它的代码使用PHP,存储引擎使用MySQL。在处理我的数据模型时,我意识到我在处理“默认”数据方面有一个小问题 我将MySQL模式设计为包含默认值,这在当时是有意义的,因为我主要是“手动”操作数据——一年后,我们开始添加控制面板,让其他人更改数据 问题在于如何处理某些对象所需的“默认”值。从技术上讲,将事物保留为“null”也是一种默认设置,但在以前我并不特别关心它 如果我使用MySQL默认值,当我插入一个新值时,我必须立即返回并查询它,以从数据库中获取“真实”数据

我正在开发一个web应用程序,它的代码使用PHP,存储引擎使用MySQL。在处理我的数据模型时,我意识到我在处理“默认”数据方面有一个小问题

我将MySQL模式设计为包含默认值,这在当时是有意义的,因为我主要是“手动”操作数据——一年后,我们开始添加控制面板,让其他人更改数据

问题在于如何处理某些对象所需的“默认”值。从技术上讲,将事物保留为“null”也是一种默认设置,但在以前我并不特别关心它

如果我使用MySQL默认值,当我插入一个新值时,我必须立即返回并查询它,以从数据库中获取“真实”数据。另一方面,如果我在PHP中设置了默认值,那么我开始违反DRY,在两个地方设置默认值。如果有人做了一个“快速”修复并在一个地方修改了它们,我可能会遇到一些非常“有趣”的bug进行调试。同时,我不能从MySQL中删除默认值,因为默认值实际上是数据模式的一部分,需要保留在其中

我敢打赌,我不是忽略了什么,就是在某个地方做出了一个无效的假设,但我不知道这是什么。有人对如何处理这个问题有什么建议吗

编辑:

为清楚起见,我的PHP代码可能大致如下:

$foo = new foo();
//Add in instance-specific data
$foo -> save;
Foo的save方法将运行查询:

INSERT INTO FOO (bar1, bar2)
VALUES (:bar1, :bar2)
但这只插入了Foo使用的(许多)变量中的两个。所有这些都将我设置为“默认”状态。现在,我必须跑:

$foo= Foo::getFooWithId($foo->id); //I know I should use a DBA; this is legacy code
然后用数据库中设置的数据填充$foo。例如,bar3和bar4具有在首次创建对象时未设置的默认值——用户可以在以后更改它们,如果他们愿意(并且可能愿意),但它们不是“默认”对象的一部分

我应该将这些默认值移到PHP中吗?把它们留在MySQL中,然后退出?把它们放在两个地方就可以干掉吗?还是我遗漏了第四个更好的选项?

您没有向我们展示一个示例查询,但我会假设出了什么问题

如果您在PHP中编写insert查询时忽略了具有默认值的元素,MySQL将接管并为您添加这些元素

因此,假设您有一个包含列
id
user
comment
的表。假设
comment
有一个默认值。我想说的是,您可以进行一个插入查询,其中只指定
id
user
(或者可能只指定
user
,如果
id
是主要的自动递增索引),并且
注释将自动接收您在表定义中设置的默认值

编辑

无论什么最适合你的应用程序设计,真的。。。看看他们在哪里会被用得最多,并把他们留在那里


但我要遵循的一条规则是:不要在多个地方设置默认值,尤其是当它们重叠(而不是扩展)时。

将其抛在脑后会有一些问题:这让我很难理解:但您是否可以使用主值表为模式中的字段设置默认值,这样应用程序就可以在选择和插入/更新操作时始终引用它?我也想知道这一点。外键是一个问题,如果它需要真正的关系,我想?我会用它们填充默认构造函数中的对象。我不认为这是OP所要求的。我认为,如果他不想依赖将COL的实际默认值放在架构中来实现其应用程序的目的,他是在寻求最佳做法。cerd您可能是对的,如果没有帮助,我将删除它。@RonLugge请看我的第一条评论,如果这是您要问的(简而言之)为了清晰起见,你可能需要编辑——我能够理解要点,但你的问题需要阅读几遍。