bind_param()で「Number of variables doesn’t match number of parameters」が出る時

2020年6月11日MySQL

PHPからMySQLのデータをプリペアドステートメントで検索する時、どこも間違ってないはずなのにbind_param()する時に以下のエラーが出ました

mysqli_stmt::bind_param(): Number of variables doesn’t match number of parameters in prepared statement in hoge php on line 1

略:パラメータと値の数がマッチしないよ

ちなみに、この時に実行したSQLは以下のようなものです

SELECT name,'?番' AS No 
FROM user;

このSQL文に対して、1個の値と型(s)をちゃんと指定してます

にも関わらずエラーが出る

この記事の内容

解決方法

バインドするプレースホルダ?を文字列から出す

SELECT name,CONCAT(?,'番') AS No 
FROM user;

CONCATは文字列を結合する関数です

一旦バインドを実行して、?を値に置換した後に文字列結合するというわけです

原因

バインドするプレースホルダ?が、文字列の中に入ってると正しく置換対象として認識されないためです

なので最初のSQL文だと、プレースホルダがないのにバインドする値を指定してるので、機械側からしたら、

「置き換えたい値はわかったけど、SQLの中にプレースホルダーねーじゃん!」となっていたというお話です

エンジニアの年収を上げる方法

フリーランスエンジニアで年収を大幅アップしませんか?
実際に僕は会社員からフリーランスエンジニアになって年収が87万円アップしました

今なら相談(ヒアリング)するだけで3,000円分のamazonギフト券がもらえます!
初めての案件契約で最大10万円分の準備金がもらえます
非公開の高単価案件(100万円超え)が多数あります

詳しくはこちら