我在尝试INSERT
时遇到问题,即使不应该这样做也会成功。
我的表结构:
注意: given1 , given2 和 given3 是必填字段。
在我的应用程序中,我执行以下方法(https://github.com/catfan/Medoo):
$this->medoo->insert('teste', ['dado2' => 11, 'dado3' => 'teste']);
这不应该被接受,因为data2的类型为SET
,而data3的类型为INTEGER`。即便如此,插入成功。此外,data1 不会作为参数传递,即使它是必填字段。
我检查了MySQL日志并获得了以下条目:
SET SQL_MODE=ANSI_QUOTES;
INSERT INTO "teste" ("dado2", "dado3") VALUES ('11', 'teste');
在数据库中手动运行此SQL,我发现问题在于使用ANSI_QUOTES
。数据库以某种方式接受插入,而不是发出错误消息,它会发出警告:
我认为需要修改Medoo源代码或将此问题报告给MySQL。我不知道该怎么做。
MySQL版本是5.7.14
我使用MySQL Workbench 6.3.6
答案 0 :(得分:0)
当mySQL服务器设置为STRICT
模式时,当您尝试插入不适合列的值时,会产生错误。通过调用SET SQL_MODE=ANSI_QUOTES;
,这种严格模式很可能被禁用。
您可以尝试联系Medoo框架的作者,或者使用其他框架或PDO
来访问您的数据库。
有关详细信息,请参阅mysql docs on server modes。