【问题标题】:SQL NULL insertion not workingSQL NULL 插入不起作用
【发布时间】:2016-01-16 22:37:52
【问题描述】:

在向表中插入新行时,我遇到了一些奇怪的 SQL 问题。我已将一些列设置为 NULL,就像我对数据库中的另一个表所做的那样。显然,当插入时没有数据通过时,它应该在记录中输入 NULL,但目前不是。

我已经检查了所有设置,并与我的其他表(正确地将记录插入为 NULL)进行比较,但找不到问题。两个表中的列如下所示。

`statement_1` varchar(255) DEFAULT NULL,

没有数据被粘贴(所以不是空格问题)。谁能建议为什么一张桌子按预期做而另一张桌子没有?

使用下面作为插入语句

    $statement_a = "INSERT INTO statements (ucsid, statement_1, statement_2, statement_3, statement_4, statement_5, statement_6, statement_7, statement_8, statement_9, statement_10) VALUES (:ucsid, :statement_1, :statement_2, :statement_3, :statement_4, :statement_5, :statement_6, :statement_7, :statement_8, :statement_9, :statement_10)";
    $q_a = $this->db_connection->prepare($statement_a);
    $q_a->execute(array(':ucsid'=>$ucsid,
                      ':statement_1'=>$statement_1,
                      ':statement_2'=>$statement_2,
                      ':statement_3'=>$statement_3,
                      ':statement_4'=>$statement_4,
                      ':statement_5'=>$statement_5,
                      ':statement_6'=>$statement_6,
                      ':statement_7'=>$statement_7,
                      ':statement_8'=>$statement_8,
                      ':statement_9'=>$statement_9,
                      ':statement_10'=>$statement_10));

【问题讨论】:

  • 您需要提供更多信息,我们才能为您提供帮助。错误信息是什么?您如何收到错误消息?您是从编程语言执行 SQL 语句还是直接进入数据库?正在执行哪个 SQL 语句?
  • 插入什么而不是null?
  • @MarcoAurélioDeleu 没有错误消息,因为其余条目已成功插入,只是当记录为空时,未添加 NULL 值。我正在使用 PHP,但是这是通过 PHP 插入和通过 phpMyAdmin 接口插入发生的。
  • 尝试相反:SELECT * FROM my_table WHERE statement_1 IS NOT NULL
  • 很可能您在插入语句中的$statement_1 变量为空白(空,非空)并且您正在插入一个空字符。这意味着您的查询可以尝试WHERE trim(statement_1) = ''

标签: mysql isnull notnull


【解决方案1】:

我是新手,无法添加 cmets:

尝试使用 NOT phpmyadmin 的简单 INSERT 语句。试试

http://www.heidisql.com/ 或 https://www.mysql.com/products/workbench/

  1. INSERT INTO 语句 (ucsid) 值 (123)
  2. INSERT INTO statements (ucsid, statement_1) VALUES (123, NULL)

在这两种情况下,statement_1 都应该为 NULL。在您的情况下,这很可能不是。但是,这表明问题出在数据库表中,而不是 php 或您正在使用的 php 执行方法。

statement_1 字段是否也定义为 NOT NULL 并且默认设置为 NULL?这不可能发生。

尝试重新创建一个没有记录的新数据库和一个新表,然后尝试插入 NULL 作为值作为测试。

您还可以使用字符集和排序规则发布数据库和表的 SQL

【讨论】:

  • 使用 HeidiSQL 正确插入数据,并按原样添加空值。这是否意味着错误来自脚本中的某个地方?在此处查看 sql:pastebin.com/nhp6nu24
【解决方案2】:

如果使用以下代码未插入任何内容,我已通过确保通过函数传递 NULL 来解决此问题

if($_POST['statement_1'] == '') { $statement_1 = NULL; } else { $statement_1 = $_POST['statement_1']; }

【讨论】:

    【解决方案3】:

    这里变量$statement_1传递的值将是""

    试试这个查询SELECT * FROM my_table WHERE statement_1 =""。你会得到行。

    这意味着您正在为 $statement_1 分配一些值,否则它应该为空。 检查你的代码。希望这会有所帮助

    【讨论】:

    • 您不应该传递 $statement_1 或指定 $statement_1=null(默认值)。两者都可以正常工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多