首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL插入需要指定所有字段吗?

问MySQL插入需要指定所有字段吗?
EN

Stack Overflow用户
提问于 2012-08-08 21:55:02
回答 3查看 2.2K关注 0票数 0

当我执行pdo指定表中的某些字段而不是所有字段时,它在一台服务器上插入正常,但在另一台服务器上插入失败。

例如,在有问题的服务器上...

表中包含三个字段id、time和intervention...

如果我运行这条语句,它会按预期插入。

代码语言:javascript
复制
$query = "INSERT INTO data_agreements (`id`, `time`, `intervention`) VALUES (?, ?, ?)";
$q = $pdo->prepare($query);
$q->execute(array("x", "y", "z"));

但是如果我运行以下语句,它将无法插入。

代码语言:javascript
复制
$query = "INSERT INTO data_agreements (`id`, `time`) VALUES (?, ?)";
$q = $pdo->prepare($query);
$q->execute(array("x", "y"));

出现问题的服务器是带有PHP5、MySql 5.2.6的IIS。在另一台运行PHP5、PHP5.2.6的服务器上,两条语句都按预期插入。因此,我想知道是否需要在有问题的服务器上设置一些MySQL安装/设置,以告诉它接受仅指定表中字段子集的语句。?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-08 22:38:57

我敢打赌列intervention不允许null值。

尝试更改该表,看看它是否有效:

代码语言:javascript
复制
ALTER table data_agreements Modify intervention varchar(50) null DEFAULT '';

并尝试再次执行该查询。我假设intervention是字符串,当然,您可以根据自己的需要对其进行修改。

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2012-08-08 22:25:25

您的SQL语句在语法上没有错误。在MySQL服务器中没有控制此行为的特定“设置”,但有一些设置可以影响特定INSERT语句是否成功,例如,允许无效日期(即不存在的日期,如6月31日)的设置,以及允许存储零日期('0000-00-00')的设置。(这种行为已经在不同版本之间发生了变化,其中“旧的”(例如V3.23)默认是允许无效日期,而“较新的”(例如v5.1)默认是不允许无效的日期。)

如果为绑定参数提供的值是有效的,那么对于您观察到的行为,最可能的解释是有一个约束被违反(或将被违反)。

这可以是primary key约束、unique key约束、foreign key约束、NOT NULL约束,甚至可以是引发异常的触发器。

例如,可以将列干预定义为NOT NULL,并且不指定默认值。

MySQL错误信息对于调试可能很有用。

另一种可能性是,该语句实际上是成功的,但它是在事务的上下文中执行的,该事务随后被回滚而不是提交。)

您的问题中没有足够的信息可供说明。

我建议您比较两个数据库上的表定义。(对我来说)最简单的方法是从每个数据库的SHOW CREATE TABLE intervention语句中获取输出,并查找差异。也有可能其中一个数据库为每个行触发器都有一个BEFORE INSERT,而另一个数据库上缺少该触发器。

票数 1
EN

Stack Overflow用户

发布于 2012-08-08 22:01:22

代码语言:javascript
复制
INSERT INTO data_agreements 
  (id, time) 
VALUES 
  (?, ?) ;

运行正常,如果在创建表时使用DEFAULT属性或AUTO_INCREMENT定义了其他字段(在本例中为intervention ),则为。如果不是,则必须显式地为INSERT语句提供一个值。

检查两个安装中的SHOW CREATE TABLE data_agreements,了解表是如何定义的。

表的TIMESTAMP列有一个不太明显的功能。它们中只有一个可以有DEFAULT CURRENT_TIMESTAMP属性(如果您没有声明,那么只有表中的第一个拥有这个缺省值)。

如果您定义了一个具有多个时间戳列的表,然后删除了第一个时间戳列,则可能会导致出现此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11866077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档