mySQL查询无法按预期工作

时间:2013-05-06 08:44:23

标签: mysql sql database pdo

我的数据库中有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));

这非常有效,我可以从users表中获取pushToken并将其写入订阅表。

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

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'

为什么我会得到它?

我想要的是从用户表中获取os和pushToken WHERE此表中的deviceID是特定的。我该怎么写这个查询?

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

1 个答案:

答案 0 :(得分:0)

很可能你会得到0行,因为你在使用deviceId os的where条件时使用WHERE deviceID = :deviceID参数,你必须更改where列。我的意思是你必须将它改为WHERE os = :deviceID

<强>更新

另外,如果可能的话,为了避免误解:deviceID更改为:os