首页 > 解决方案 > INSERT 语句给了我 '' 空字符串,但它似乎需要为空

问题描述

好的,我在 php 中有这个类对象,其中创建了 INSERT 语句,因此它不会为 ID 提供值,因为这意味着它在传递到数据库时简单地自动递增。以前可以用,现在不行了。事实上,它仍然适用于我的实时服务器,但不适用于我的本地主机开发环境。我的sql出来的时候是这样的:

INSERT INTO sessions (u_sess, user_id, school_id, teacher_id, test_id, holder_id, visible, date_created, last_updated) VALUES ('', '1', '1', '', '', '', '', '2019-09-19 22:18:58', '2019-09-19 22:18:58')Database query failed.

当我将其粘贴到我的 phpMyAdmin 的 SQL 窗口中时,它会为我提供有关该问题的更详细的反馈:

1366 - 不正确的整数值:第 1 行的列 'u_sess' 的 ''

所以,我改变了我的 INSERT 语句,看起来第一个位置有一个 NULL 并且将错误向下滚动到下一个 '' 空字符串。所以,我猜测错误来自这样一个事实,即我的 php 对象正在生成一个包含空字符串的 INSERT 语句,而不是所有未知值的 NULL。我不知道如何正确修改我的 php 对象以使其识别并将每个 '' 重新定义为 NULL。我确信这会解决它,因为当我将所有空字符串都更改为 NULL 时……东西最终会正确插入。

这是我的 CREATE 方法:

        global $database;
        $attributes = $this->sanitized_attributes();
        $sql  = "INSERT INTO ".self::$table_name." (";
        $sql .= join(", ", array_keys($attributes));
        $sql .= ") VALUES ('";
        $sql .= join("', '", array_values($attributes));
        $sql .= "')";
        echo $sql;

      if($database->query($sql)) {
        $this->u_sess = $database->insert_id();
        return true;
      } else {
        return false;
      }
    }

标签: phpmysqloopnullinsert

解决方案


让我们考虑一下function

function handle($input) {
    return ((!$input) && ($input !== '')) ? "null" : $input;
}

调用它function会产生你喜欢的值。


推荐阅读