2

我在尝试做一个时遇到了问题INSERT,它成功了,即使它不应该。

我的表结构: 表结构

注意:given1given2given3必填字段

在我的应用程序中,我执行以下方法(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. 数据库以某种方式接受了 insert,而不是发出错误消息,而是发出警告:
返回消息的打印屏幕

我认为需要修改 Medoo 源代码或将此问题报告给 MySQL。我不知道该怎么办。

MySQL 版本是 5.7.14
我使用 MySQL Workbench 6.3.6

4

1 回答 1

1

当 mySQL 服务器设置为STRICT模式时,当您尝试插入不适合列的值时会产生错误。通过调用SET SQL_MODE=ANSI_QUOTES;这个严格模式很可能被禁用。

您可以尝试联系 Medoo 框架的作者,或者使用其他框架或只是PDO访问您的数据库。

有关更多信息,请参阅有关服务器模式的 mysql 文档

于 2017-11-23T15:56:45.930 回答