我在尝试执行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
1条答案
按热度按时间vuktfyat1#
当mySQL Server设置为
STRICT
模式时,当您尝试插入不适合列的值时,它会产生错误。通过调用SET SQL_MODE=ANSI_QUOTES;
,此严格模式很可能被禁用。您可以尝试联系Medoo框架的作者,或者使用另一个框架或仅使用
PDO
来访问数据库。有关详细信息,请参见mysql docs on server modes。