-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));

これは完全に機能し、users テーブルから pushToken を取得して、subscriptions テーブルに書き込むことができます。

しかし後で、サブスクリプション テーブルに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'

なぜ私はそれを得るのですか?

私が望むのは、このテーブルのdeviceIDが特定のものであるユーザーテーブルからosとpushTokenを取得することだけです。このクエリをどのように記述できますか?

また、私が書いたクエリが間違っている理由を知ることができればうれしいです...それは私には意味がありません。

4

1 に答える 1

0

oswhere列を変更する必要があるdeviceIdでwhere条件のパラメーターを使用しているため、明らかに0行が得られWHERE deviceID = :deviceIDます。つまり、次のように変更する必要があります。WHERE os = :deviceID

アップデート

また、誤解を避けるため、できれば変更:deviceIDしてください:os

于 2013-05-06T09:08:15.193 に答える