【发布时间】:2018-07-31 05:11:48
【问题描述】:
我正在尝试学习 PDO 并应用于现有的 Joomla 数据库表(“用户”),仅用于学习目的。但是,我不断收到有关“lastResetTime”列的错误。
23000 SQLSTATE[23000]:违反完整性约束:1048 列 'lastResetTime' 不能为空
当默认系统使用户时,默认值设置为 0000-00-00 00:00:00,尽管设置不是 NULL。
由于某种原因,我无法在查询中传递此值 (0000-00-00 00:00:00)。 这就是我所拥有的。谁能告诉我如何触发默认值,尽管我不能提供 NULL,也不能提供 0000-00-00 00:00:00(如果我是正确的,这是绝对无效的)
<?php
require 'PDO.php';
$table = $prefix."users";
$pdo = new PDO($dsn,$user,$pass,$opt);
$stmt = $pdo->prepare("INSERT INTO $table (username, email, params, registerDate, lastvisitDate, lastResetTime) VALUES(?, ?, ?, now(),now(), ?)");
$stmt->execute(["lalaa","aaaa","",NULL]);
表格格式如下:
CREATE TABLE `x7j4o_users` (
`id` int(11) NOT NULL,
`name` varchar(400) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`username` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`password` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`block` tinyint(4) NOT NULL DEFAULT '0',
`sendEmail` tinyint(4) DEFAULT '0',
`registerDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastvisitDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`activation` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`params` text COLLATE utf8mb4_unicode_ci NOT NULL,
`lastResetTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date of last password reset',
`resetCount` int(11) NOT NULL DEFAULT '0' COMMENT 'Count of password resets since lastResetTime',
`otpKey` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Two factor authentication encrypted keys',
`otep` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'One time emergency passwords',
`requireReset` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'Require user to reset password on next login'
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
更新以下似乎也不起作用
$stmt = $pdo->prepare("INSERT INTO $table (name, username,registerDate,lastvisitDate,lastResetTime) VALUES(?,?,DEFAULT,DEFAULT,DEFAULT)");
$stmt->execute(['aaaa','aaaaaaaa']);
它会触发错误:
22007 SQLSTATE[22007]:无效的日期时间格式:1292 不正确的日期时间值:第 1 行的列 'registerDate' 的日期时间值不正确
如果有人知道我如何使用 mysql 中设置的默认值,我会非常高兴。
【问题讨论】:
-
所以将您的
["lalaa","aaaa","",NULL]更改为["lalaa","aaaa","",""]- 为什么在您的列不接受 NULL 值时传递 NULL? -
感谢您的回复。不幸的是,我之前尝试过,但它导致错误:22007 SQLSTATE [22007]:无效的日期时间格式:1292 不正确的日期时间值:'' for column 'lastResetTime' at row 1 这就是为什么我不明白这一点,因为 params ,不是在抱怨
-
然后尝试从中删除它。那应该自动填充自己。或者使用数组中列的所有值/列号。
-
再次感谢,我今天早上也试过了 :( 它会导致错误:22007 SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00第 1 行的列“lastResetTime”:00'
-
欢迎。这可能解决您的问题。尝试将您的
id列更改为自动递增。您的查询可能正在尝试使用未正确填充且未正确同步的列。您的架构中的列比查询中的列多,除非您没有包含所有内容。