【问题标题】:INSERT by ANSI_QUOTES mode按 ANSI_QUOTES 模式插入
【发布时间】:2018-05-07 15:16:56
【问题描述】:

我在尝试执行 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。数据库以某种方式接受插入,而不是发出错误消息,而是发出警告:


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

MySQL 版本为 5.7.14
我使用 MySQL Workbench 6.3.6

【问题讨论】:

    标签: php mysql sql-insert ansi medoo


    【解决方案1】:

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

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

    更多信息请参见mysql docs on server modes

    【讨论】:

    • 完美的朋友!!!谢谢(你的)信息。我通过注释 Medoo.php ($commands [] = 'SET SQL_MODE = ANSI_QUOTES') 的第 121 行并将 ANSI_QUOTES 模式直接添加到 MySQL 配置来解决了这个问题。问题在于 Medoo,它不应该删除所有模式而只留下 ANSI_QUOTES,应该保留其他模式并添加 ANSI_QUOTES。
    猜你喜欢
    • 2013-06-24
    • 2015-11-14
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多