尽管尝试调试,但我无法解决这个致命错误——问题是 mySQL Insert 语句
错误是:
致命错误:未捕获的 PDOException:SQLSTATE[23000]:完整性 违反约束:1062 中键“uq_mobile”的重复条目“” /home/path/public_html/signupvalidate.php:51 堆栈跟踪:#0 /home/path/path/signupvalidate.php(51): PDOStatement->执行(数组) #1 {main} 被扔进 /home/path/path/signupvalidate.php 第 51 行
什么是“uq_mobile”? 这不是我的代码或 mySQL 数据库或表设置中任何地方的短语
插入语句是:
$stmtInsertProfile = $conn->prepare('INSERT INTO users_profile (userid, firstName, middleName, lastName, mobile, email, country, registeredAt, lastLogin, intro, userProfile)
VALUES (:userid, :firstName, :middleName, :lastName, :mobile, :email, :country, :registeredAt, :lastLogin, :intro, :userProfile)');
$stmtInsertProfile->execute([
// 'id' => '', // do not specific the auto increment primary key on insert commands
'userid' => $fetchedUserID,
'firstName' => '',
'middleName' => '',
'lastName' => '',
'mobile' => '',
'email' => $fetchedUserEmail,
'country' => '',
'registeredAt' => '',
'lastLogin' => '',
'intro' => '',
'userProfile' => ''
]);
我导出的表结构是:
CREATE TABLE `users_profile` (
`id` bigint(20) NOT NULL,
`userid` int(11) NOT NULL,
`firstName` varchar(50) DEFAULT NULL,
`middleName` varchar(50) DEFAULT NULL,
`lastName` varchar(50) DEFAULT NULL,
`mobile` varchar(15) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`userBio` text NOT NULL,
`country` varchar(32) NOT NULL,
`registeredAt` int(11) NOT NULL,
`lastLogin` int(11) DEFAULT NULL,
`intro` tinytext DEFAULT NULL,
`userProfile` text DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
表中的主键是“id”,因此 INSERT 命令中不会引用它。 $fetchedUserEmail (有效的电子邮件字符串)和 $fetchedUserID (有效的整数)都是变量,当我在调试期间输出它们时,它们包含预期值
我发现问题了。
在 INSERT 语句中,我在“mobile”字段中输入了一个整数,现在它可以工作了。
“移动”=>“5555”,
奇怪..我猜mySQL不喜欢“mobile”作为字段名称...