我有一个php项目,我使用自制的mysqli扩展包装器。它适用于选择,更新和删除语句,但不适用于插入。
例如,我有一个包含三个字段的表 - id,name,surname。 插入查询如下所示:
$add = new SqlQuery();
$add->addField('id', 1);
$add->addField('name', 'Alex');
$add->execute();
并且它总是失败,因为sql server没有surname
字段的默认值
但出于某些神秘的原因,此代码适用于生产服务器。
不同的mysql服务器版本的默认值设置是否有任何差异?
或者,是否有任何选项或参数,我如何管理mysql服务器的这种行为?
答案 0 :(得分:0)
您可以为姓氏字段指定默认值,也可以自己插入占位符值。
否则,在MySQL方面,insert语句总是会失败。我不确定为什么它在您的生产服务器上工作,如果确实没有指定默认值,但我认为在您的数据中留下这些漏洞是不好的做法。
因此,即使用户没有给出或者没有指定您应该存储的某些数据,我建议您自己选择一个默认占位符 - 无论是普通的NULL值还是空字符串或其他什么,但它如果您已正确设置,将更容易使用您的数据。
答案 1 :(得分:0)
这是数据库配置。属性称为sql_mode,更确切地说是 - strict_trans_tables或strict_all_tables。如果启用了任何此选项,则数据库将在这种情况下抛出错误(查看问题)并在禁用选项时发出警告。
有参考http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables