【问题标题】:how to INSERT into a table if no WARNING_COUNT, Mysql,php如果没有WARNING_COUNT,Mysql,php,如何插入表
【发布时间】:2013-11-16 10:15:47
【问题描述】:

我正在尝试插入一些从 csv 导出到数据库的盲值。在此过程中,它会插入我提供的任何内容,甚至没有显示任何警告。

示例: 我有一个如下表结构

  #   column-name     type
  --   ---            ----
  1   id             int(11)
  2   name           varchar(32)
  3   bool           tinyint(1)

插入查询:

INSERT INTO `table_name` (`id`, `name`, `bool`) VALUES ('a', '11111', 'abced');

当我尝试运行上述查询时,它会插入一行但会弹出一个警告。我找到了一个解决方案,我理解它不是正确的方法。

我的尝试

INSERT INTO `table_name` (`id`, `name`, `bool`) VALUES ('a', '11111', 'abced');

php

$warningCount = count fetched after executing the query "SELECT @@warning_count"
if($WarningCount > 0){ DELETE THE ROW INSERTED and ECHO error Message}

【问题讨论】:

  • 你不能这样插入。您的插入值与表数据类型不匹配。我想知道它是如何工作的。
  • 我不知道.. 它还在做.. "bool" 列将有 0

标签: php mysql sql-insert corresponding-records


【解决方案1】:

尝试将 SQL 模式设置为 STRICT_ALL_TABLES。

mysql> set @@session.sql_mode = STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t14 (id integer, name varchar(32), bool tinyint(1));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t14 set id=1, name="test", bool="bla";
ERROR 1366 (HY000): Incorrect integer value: 'bla' for column 'bool' at row 1

MySQL documentation 状态:

为所有存储引擎启用严格模式。无效的数据值被拒绝。更多细节如下。

严格模式控制 MySQL 如何处理数据更改语句(如 INSERT 或 UPDATE)中的无效或缺失值。一个值可能由于多种原因而无效。例如,它可能具有错误的列数据类型,或者可能超出范围。

然后插入事务。失败的插入查询将不计算在内。请记住,在“全有或全无”规则的意义上,MySQL 事务并不是完全原子的。您可以提交一个事务,其中一半语句已完成,另一半则失败。

【讨论】:

  • 这在 localhost 上运行良好,但是当我在我的网络服务器上使用它时.. 它没有按应有的方式运行.. :(.. 网络服务器管理员说不允许设置或取消设置 sql_modes。 . :(..
  • 那么你唯一能做的就是在使用php插入之前验证数据。 if( preg_match("/^[1-9]{1}[0-9]*$/", $id) === 1 ) and strlen($name)
猜你喜欢
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 2018-02-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多