Replace 使用mysql PDO进行查询替换时出错

Replace 使用mysql PDO进行查询替换时出错,replace,pdo,Replace,Pdo,我尝试使用pdo执行以下mysql查询 REPLACE INTO session SET id = :id, user_id = :user_id, data = :data, timestamp = :timestamp 我得到以下错误: [18-Sep-2014 11:48:10] Exception Message: Unhandled Exception. SQLSTATE[42000]: Syntax error or access violation: 1064 You have

我尝试使用pdo执行以下mysql查询

REPLACE INTO session SET id = :id, user_id = :user_id, data = :data, timestamp = :timestamp
我得到以下错误:

[18-Sep-2014 11:48:10] Exception Message: Unhandled Exception.
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, data = ?, timestamp = ?' at line 1.
您可以在日志中找到错误:

Query:REPLACE INTO session SET id = :id, user_id = :user_id, data = :data, timestamp = :timestamp
参数:

Array
(
    [id] => sv9o264ciicsfd8porp1v0gl46
    [user_id] => 0
    [data] => version|s:8:"computer";linkedin|a:1:{s:5:"state";s:7:"Q7HXzKo";}github|a:1:{s:5:"state";s:7:"Q7HXzKo";}
    [timestamp] => 1411030090
)
我的表会话结构是:

CREATE TABLE IF NOT EXISTS `session` (
  `id` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `user_id` mediumint(10) NOT NULL,
  `data` text COLLATE utf8_unicode_ci NOT NULL,
  `timestamp` int(40) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `session` (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
当我使用phpmyadmin执行时,它工作正常。

你能帮我弄明白是什么问题吗?

你忘了等号。 更改查询的这一部分:

user_id :user_id
致:

我还认为,对您的一列使用保留关键字(如
timestamp
)可能会有问题,请尝试将其更改为
tstamp
。您还可以尝试在查询中引用名称

REPLACE INTO session SET `id` = :id, `user_id` = :user_id, `data` = :data, `timestamp` = :timestamp

我发现了一个非常愚蠢的错误:我应该把,从参数中分离出来:

我改变了这个

:用户id,

致:

:用户id,

很抱歉我输入错误,我仍然会收到相同的错误:SQLSTATE[HY093]:参数编号无效可能与唯一主键连接??我还得到了SQL:[95]替换为会话集id=:id,user_id=:user_id,data=:data,timestamp=:timestamp参数:1键:名称:[10]:timestamp paramno=3 Name=[10]“:timestamp”是\u param=1参数\u type=2
REPLACE INTO session SET `id` = :id, `user_id` = :user_id, `data` = :data, `timestamp` = :timestamp