質問: :title return $prepare->execute(); ``` コードが見辛くて申し訳ございません。 お力を貸していただければ幸いでございます。 よろしくお願いいたします。
回答: 理由としては、下記と思います。 * PDO::prepare > > PDOStatement::execute() をコールする際には、 文に渡すパラメータにはそれぞれ固有のパラメータマークを設定する必要があります。 エミュレーションモードが有効になっていない限り、 **ひとつのプリペアドステートメントの中で、同じ名前のパラメータマークを 複数使用することはできません。** > > > つまり「:title」が複数回出てきているため、PDO側のルールに引っかかっているということですね。 カラム名と合わせる必要はないので別名にするか、疑問符 (?) パラメータマークを利用してはいかがでしょうか。 それか、名前のパラメータマークを利用したいのであれば、特にupdateですし、Whereには「更新されないカラム」を指定されるのが通例ではないかなと思います。※一気に複数更新したいとかならまだ別ですが あまり汎用的にしすぎるのも今回のような問題が起きることにもなりますので、なるべく通例に沿った作りのみを許容しておくようにしてもいいかもしれません。 どのように作ったとしてもイレギュラーというのは発生するものなので、イレギュラーをなるべく吸収しようと作った結果、あまり緩い作りになってしまってもフレームワークとしては良くありません。 イレギュラーはSQLを自分で作らせて直実行にしてもいいかもしれませんね。 個人的な意見ですが、私であればUPDATEとDELETEはWhereにキーのみ許容する作りを軸にします。 蛇足: コメントで書きましたがbindParamとbindValueが混在する作りはあまり良くないと思います。 できればbindValueのみで統一しましょう。