我的数据库中有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是特定的。我该怎么写这个查询?
也很高兴知道为什么我写的查询是错误的...这对我没有意义。
答案 0 :(得分:0)
很可能你会得到0行,因为你在使用deviceId os
的where条件时使用WHERE deviceID = :deviceID
参数,你必须更改where列。我的意思是你必须将它改为WHERE os = :deviceID
<强>更新强>
另外,如果可能的话,为了避免误解:deviceID
更改为:os
。