触发警告时PHP未插入MySQL行

触发警告时PHP未插入MySQL行,php,mysql,sql,Php,Mysql,Sql,我刚刚继承了一个为其提供支持的PHP/MySQL应用程序。我已尝试将本地环境设置为与生产环境尽可能接近,但不知何故,live code正在设法插入一行数据,其中本地设置上的相同代码正在生成警告,而没有执行插入 我曾尝试关闭MySQL严格模式并直接对数据库运行PHP中的查询,我发现警告已经生成,但插入仍然有效 在我的本地环境中,PHP中的代码阻止插入的原因是什么 更新(包括示例) 生成的错误消息是 "Field 'filed_name' doesn't have a default value"

我刚刚继承了一个为其提供支持的
PHP/MySQL
应用程序。我已尝试将本地环境设置为与生产环境尽可能接近,但不知何故,live code正在设法插入一行数据,其中本地设置上的相同代码正在生成警告,而没有执行插入

我曾尝试关闭
MySQL严格模式
并直接对数据库运行
PHP
中的查询,我发现警告已经生成,但插入仍然有效

在我的本地环境中,
PHP
中的代码阻止插入的原因是什么

更新(包括示例)

生成的错误消息是

"Field 'filed_name' doesn't have a default value"
因此,基本上,在生产服务器post查询中出现的是一个新行,但是在本地,没有任何内容


我还要提到,
else
子句甚至不存在于生产代码中。我把它放在那里只是为了了解发生了什么。

生产环境可能被配置为不显示带有错误报告(0)之类的警告;或php.ini上的类似配置。如果您在本地环境中使用此设置,结果可能会类似。但是注意:不要看到错误和/或警告,这可能是一件非常危险的事情。你应该设法解决引起警告的问题

“字段'Field_name'没有默认值”

这个信息的意思是

表中有一列定义为
notnull
,没有
default
value子句。
除非通过
insert
语句传递一个值,否则无法插入

示例

create table test_table( i int not null auto_increment primary key,
                         j int not null,
                         name varchar(10) );

insert into test_table(name) values( 'Ravinder' );
ERROR 1364 (HY000): Field 'j' doesn't have a default value

在您的表中检查此类字段,并将其包含在您的
insert
语句中。

因此我能够复制该行为。我以前曾尝试在数据库中设置
sql\u模式

SET @@global.sql_mode = '';
SET @@sql_mode = '';
这不起作用。我在Windows7上使用的是64位MySQL。我试图编辑
my.ini
文件并更改

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

这阻止了MySQL服务的启动

最后,我重新运行了
MySQLInstanceConfig.exe
,并在安装过程中取消选中了
启用严格模式
选项

我现在还认为可以简单地从
my.ini
文件中删除
sql模式=
,以获得相同的结果,因为这似乎是运行配置向导后唯一不同的地方


最后,我重新启动了
MySQL
Apache2.2

对于初学者来说,向我们展示错误/代码会有所帮助哈哈,是的,我知道,但是我被NDA束缚住了,它阻止我显示代码。我将用“示例”更新我的问题。对不起,我理解。顺便说一句,您的查询会中断;尝试以下操作:
$sql=“插入表(
name
)值(“12312341234”)”。我非常怀疑这是个问题。看看这是否有帮助:@Darren是的,你是对的,但是实际执行的SQL变成了:insert into meetings(name)values('150414102616')是的,我也这么认为,所以我已经更改了这个,但它仍然没有插入。我同意解决错误比不显示错误要好,我甚至不知道这怎么可能。我以前从未见过这样的代码!嗯。。奇怪的那么,您也可以尝试在发出警告的行中使用@(这可能是一件危险的事情)。您还可以用try-catch…来包围代码中有问题的部分。。。。嗯,如果没有看到代码和错误消息,就很难帮助您。谢谢。我知道这一点。该字段的类型为mediumtext,因此实际上不允许使用默认值。除此之外,我并没有试图修复这个错误(刚才)。我更关心的是为什么相同的代码在生产服务器上工作,但在我的本地环境中不工作。请检查pro server中的表上是否存在任何before insert触发器?没有触发器。并且pro server表中的列上是否有一个
not null
?是的,它没有null集。我不知道谁会将一个字段设置为非空,然后编写一个不设置该值的查询,但是他们已经设法使其工作,我不知道如何!
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode=