-1

我的数据库中有 2 个表:

users
------
id
deviceID
os
pushToken

subscription
------
deviceID
pushToken

当用户需要在订阅表中订阅时,他“给”我他的deviceID。然后使用此语句,我将他的deviceID和他的pushToken添加到表中:

$stmt = $db->prepare("INSERT INTO subscription(deviceID,pushToken)
                        Select deviceID , pushToken FROM users  WHERE deviceID = :deviceID");
$stmt->execute(array(':deviceID' => $deviceID));

这完美地工作,我能够从用户表中获取 pushToken 并将其写入订阅表中。

但是后来我注意到我真的不想在订阅表中有deviceID 。我真正需要的是拥有操作系统。所以订阅表现在看起来像这样:

subscription
------
os
pushToken

使用与以前相同的逻辑,当用户将他的deviceID传递给我时,我希望能够为他订阅这个新表。我写了这个声明:

$stmt = $db->prepare("INSERT INTO subscription(os,pushToken)
                        Select os , pushToken FROM users  WHERE deviceID = :deviceID");
$stmt->execute(array(':deviceID' => $deviceID));

但是这一次,我无法进行INSERT工作!我也没有收到错误..

这里有什么问题?

编辑


我开始明白问题出在哪里,但我不知道如何解决它。我实际上遇到了一个错误,错误是:

PDOException Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'deviceUDID' in 'where clause'

为什么我会得到它?

我想要的只是从用户表中获取操作系统和 pushToken,其中该表中的 deviceID 是特定的。我该如何编写这个查询?

也很高兴知道为什么我写的查询是错误的......这对我来说没有意义。

4

1 回答 1

0

显然,您得到 0 行,因为您os在 where 条件下使用参数与 deviceIdWHERE deviceID = :deviceID您必须更改 where 列。我的意思是你必须把它改成WHERE os = :deviceID

更新

:deviceID另外,为了避免误解,:os尽可能改成。

于 2013-05-06T09:08:15.193 回答