Оператор INSERT дает мне пустую строку, но она должна быть нулевой - PullRequest
0 голосов
/ 20 сентября 2019

Хорошо, у меня есть объект класса в php, где создается оператор INSERT, так что он не дает значения для идентификатора, потому что он предназначен для простого автоинкремента, когда он передается в базу данных.Раньше работал, сейчас нет.на самом деле, он все еще работает на моем живом сервере, но не на моей среде разработки localhost.Мой 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.

Когда я вставляю это в окно SQL моего phpMyAdmin, он дает мне более подробный отзыв о проблеме:

1366 - Неверное целое числозначение: '' для столбца 'u_sess' в строке 1

Итак, я изменил свой оператор 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;
      }
    }

1 Ответ

0 голосов
/ 20 сентября 2019

Давайте рассмотрим это function:

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

Вызов этого function даст желаемое значение.

...