【问题标题】:default values for different mysql server version不同mysql服务器版本的默认值
【发布时间】:2015-07-02 07:46:08
【问题描述】:

我有一个 php 项目,我使用自制的 mysqli 扩展包装器。它适用于 selectupdatedelete 语句,但不适用于 insert

例如,我有一个包含三个字段的表 - id、name、surname。 插入查询如下所示:

$add = new SqlQuery();
$add->addField('id', 1);
$add->addField('name', 'Alex');
$add->execute();

它总是失败,因为 sql server 没有 surname 字段的默认值。
但是由于一些神秘的原因,这段代码可以在生产服务器上运行。

不同mysql服务器版本的默认值设置有什么不同吗?
或者,是否有任何选项或参数,我如何管理 mysql 服务器的这种行为?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以为姓氏字段指定默认值,也可以自己插入占位符值。

    否则,插入语句在 MySQL 端总是会失败。如果确实没有指定默认值,我不确定为什么它在您的生产服务器上工作,但我认为无论如何在您的数据中留下这样的漏洞是不好的做法。

    因此,即使用户没有提供或没有指定您应该存储的特定数据,我建议您自己选择一个默认占位符 - 无论是纯 NULL 值还是空字符串或其他任何东西,但它会更容易如果您的设置正确,以后再使用您的数据。

    【讨论】:

    • 这是第三方服务,我无法直接管理(code和sql)。我有它的源代码,我发现那里有外壳,而且这个外壳在生产服务器中没有关闭,哈哈。所以,我查看生产服务器代码,它看起来像我的。但它适用于产品,但不适用于我。
    【解决方案2】:

    这是数据库配置。称为 sql_mode 的属性,更准确地说 - strict_trans_tables 或 strict_all_tables。如果启用了这些选项中的任何一个,数据库将在这种情况下抛出错误(查看问题),如果选项被禁用,则会发出警告。

    有参考http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2011-01-22
      • 2020-06-11
      • 1970-01-01
      • 2012-02-25
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多