完整性约束违规:1048列'user_agent'不能为空

时间:2018-02-12 09:15:16

标签: php mysql

我的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语句:

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;

2 个答案:

答案 0 :(得分:0)

您应该为ALTER TABLE `log` MODIFY COLUMN `id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY; 设置一个值,因为它不是auto_incrementable。或者您也可以使用以下命令将id修改为auto_incrementable:

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

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

Ctrl-Shift-I

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

答案 1 :(得分:0)

在创建声明中,此字段就像

 `user_agent` text COLLATE utf8_unicode_ci NULL,