ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

phpのPDOで、 postgresqlのjsonb演算子(?)を使いたい場合

概要

php(PDO) + postgresql の生SQLを実行時に Invalid parameter number: mixed named and positional parameters が発生。

原因、postgresqlのjsonbの演算子などではよく「?」を使うことがあるが、これと、phpのPDOのプリペアドステートメントの「?」(疑問符パラメータ)と勘違いされてエラー

例) foo_table.bar ? 'fuga_colum_name' といったpostgrsqlのjsonbの演算子(fuga_colum_nameというキーがbarカラムの中に存在するかを調べる)

解決方法

php(PDO)に渡すSQL文に「?」を使いたい場合は、「??」というふうにすれば使える。

PHP 7.4.0 以降では、クエスチョンマークを2回続けることで、 クエスチョンマークそのものをエスケープすることができます。 これは、?? という文字列が、 クエリをデータベースに送信する時に ? に変換されるということです。

参考文献

PHP: PDO::prepare - Manual