【问题标题】:Integrity constraint violation: 1048 Column 'user_agent' cannot be null完整性约束违规:1048 列“user_agent”不能为空
【发布时间】:2018-02-12 17:51:43
【问题描述】:

我的 MySQL 数据库有一个名为 user_agent 的列。我正在通过 PHP 填充它。有时这可能是空的。

我收到以下错误消息:

[12-Feb-2018 08:09:25 UTC] PHP 致命错误:未捕获的异常 带有消息“SQLSTATE [23000]”的“PDOException”:完整性约束 违规:1048 列 'user_agent' 不能为空' /home/user_name/public_html/folder/index.php:112

我读到我应该启用 NULL。

为什么这个文件不能是空的?空字符串也是字符串,不是吗?

编辑:

这是我的 PHP 代码:

$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$statement = $pdo->prepare("INSERT INTO log (ip, user_agent) VALUES (:ip, :user_agent)");
$statement->execute(array(':ip' => $ip, ':user_agent' => $user_agent));

好像有些访问者没有 user_agent。

这是创建表语句:

CREATE TABLE `log` (
  `id` int(6) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `ip` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
  `user_agent` text COLLATE utf8_unicode_ci NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

【问题讨论】:

  • 是的,空字符串仍然是string。但是,它看起来或多或少像您未设置引用的变量。您可以通过default 将变量定义为空字符串或允许列为NULL
  • the variable your referencing is not set;你的意思是,没有在 PHP 中设置?
  • 粘贴您的create table 声明。只有这样才能准确判断出了什么问题。
  • @David:正确。您能否提供有关您的查询的更多详细信息?
  • @fab 我用 PHP 代码更新了我的第一篇文章并创建了表语句。

标签: php mysql


【解决方案1】:

在创建语句中这个文件就像

 `user_agent` text COLLATE utf8_unicode_ci NULL,

【讨论】:

    【解决方案2】:

    您应该为您的id 设置一个值,因为它不是 auto_incrementable。或者你也可以修改 id 为 auto_incrementable :

    ALTER TABLE `log` MODIFY COLUMN `id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY;
    

    如果某些访问者没有用户代理,您可以将 user_agent 列重新定义为可为空。

    ALTER TABLE `log` MODIFY COLUMN `user_agent` text COLLATE utf8_unicode_ci NULL;
    

    否则您将无法记录他们的操作。 运行这些命令后,插入应该可以工作。

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2016-09-05
      • 2018-05-01
      • 2021-09-25
      • 2020-03-29
      • 2018-03-04
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多