私はこれを半日かけて理解しようとしました...
行を削除する必要があるかどうかを確認するために、DB に対して計算するスクリプトがあります。
$number = count($INSERT)-count($INDB);
$number 変数は次のいずれかになります。
- $number = 0。これは、行を削除または挿入しないことを意味します
- $number > 0 は、行を挿入する必要があることを意味します
- $nubmer < 0。これは、いくつかの行を削除する必要があることを意味します
1. と 2. は機能しますが、3. ではエラーが発生します。
if($number < 0){
$limit = abs($number);
echo "DELETE FROM pversions
WHERE fk_p_id = $pid
ORDER BY pversion_id DESC
LIMIT $limit";
$remVersions = $pdo->prepare("
DELETE FROM pversions
WHERE fk_p_id = :pid
ORDER BY pversion_id DESC
LIMIT :lmt");
$remVersions->execute(array(":pid" => $pid, ":lmt" => $limit));
$left = count($versions)-$limit;
}
エコーはこれを返す可能性があります:
DELETE FROM pversions WHERE fk_p_id = 1 ORDER BY pversion_id DESC LIMIT 1
しかし、これは私にこのPDO例外を与えています:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:
Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right syntax
to use near ''1'' at line 4'
上記のエコーの正確な出力を取得して PhpMyAdmin に入力すると、まったく問題はありません。それはまさに私が望むようにタスクを実行します。
エラーを削除するとLIMIT :lmt
、エラーは表示されず、すべての行が削除されます。したがって、エラーは「LIMIT」にあると確信しています。
誰かが私がここで間違っていることを教えてくれることを願っています。