PAGESテーブルのエントリを削除したい。削除すると、OBJECTSテーブルにカスケードされます。ここでは心配ありません。単純なを使用してエントリを削除すると機能しDELETE
ます。ただし、いくつかの条件を指定する必要があります。
PAGESテーブル
+--------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+---------+----------------+
| page_id | int(11) | NO | PRI | NULL | auto_increment |
| users_id | int(11) | NO | MUL | NULL | |
| page_value | varchar(20) | NO | UNI | NULL | |
+--------------------------+--------------+------+-----+---------+----------------+
OBJECTSテーブル
+----------------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+----------------+
| objects_id | int(11) | NO | PRI | NULL | auto_increment |
| page_id | int(11) | NO | MUL | NULL | |
| objects_name | varchar(50) | NO | | NULL | |
| objects_avail | varchar(20) | NO | | NULL | |
+----------------------------+-------------+------+-----+---------+----------------+
の場合objects_avail == "ALL"
、そのエントリをカスケード削除に含めてはなりません。このSQLクエリを思いついたのですが、エラーが発生しました。
$query = "
DELETE FROM pages AS p
INNER JOIN objects AS o ON p.page_id = o.page_id
WHERE p.page_id = ?
AND p.users_id = ?
AND p.page_value = ?
AND o.objects_avail != ?";
スローされたエラー:
["42000"、1064、 "SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、'AS pINNERJOINオブジェクトの近くで使用する正しい構文を確認してください。ASoONp.page_id = o.page_id 1行目のWHER']]
PDOプレースホルダーの値の例:
$params = array(81,5,"main page","ALL");
これはすべて有効であり、問題が発生している場所ではないと確信しています。
クエリにいくつか欠けているのではないかと疑ったり、疑ったりします。何か提案がありますか?