我的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;
答案 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,