【发布时间】: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 代码更新了我的第一篇文章并创建了表语句。