首页 > 解决方案 > 表中的意外数据

问题描述

我有一个在表中插入或替换数据的查询,它在本地主机上工作正常,但在真实主机上它表现得很奇怪。

查询:

REPLACE INTO sessions (
    user_id, authorization_token, authorization_token_expires, refresh_token, refresh_token_expires
) VALUES (
    :user_id, :authorization_token, :authorization_token_expires, :refresh_token, :refresh_token_expires
);

问题是当我在表中插入一个新行时,它会插入一个 user_id = 0 的行,并在每次插入/替换查询时更新它。由于这在本地工作正常,我认为服务器/DBMS 设置有问题。

编辑

的结果SHOW CREATE TABLE sessions

CREATE TABLE `sessions` (
 `user_id` int(11) NOT NULL,
 `authorization_token` varchar(255) NOT NULL,
 `authorization_token_expires` varchar(10) NOT NULL,
 `refresh_token` varchar(255) NOT NULL,
 `refresh_token_expires` varchar(10) NOT NULL,
 PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

编辑 2

似乎问题出在pdo->lastInsertId();. 我有一个在我的users表中插入用户并返回 lastInsertId 的函数。如果我var_dump()这个函数结果看起来像string(1) "1"。如果我将函数的结果传输到在表中插入行的函数,sessions我会得到上面描述的奇怪结果。但是,如果我将像“1”这样的简单字符串传输到插入会话的函数中,我会得到正确的行为。绝对不知道发生了什么:/

标签: phpmysqlpdo

解决方案


推荐阅读