bind_param()で「Number of variables doesn’t match number of parameters」が出る時
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の中にプレースホルダーねーじゃん!」となっていたというお話です
ディスカッション
コメント一覧
まだ、コメントがありません
よくLoadingされてるDocs
新たにPostされたDocs
: ウェブサービス
メルカリやラクマの商品がいつ出品されたのかを調べる裏技
メルカリやラクマなどで商品を探してると、ときどき、 「この商品はいつ出品されたも ...: 仕事環境
15年前のエアコンに洗浄スプレーしたら想像以上にキレイになった
うちのエアコンは新品で購入してからすでに15年が経過しています にもかかわらず、 ...: Laravel
一定時間で消えるフラッシュメッセージを簡単に実装[Laravel8]
以前、手軽にフラッシュメッセージが実装できるnotieを紹介しました 今回は、そ ...: Laravel
ランダムな文字列やユニークなIDをLaravelで生成
random use Illuminate\Support\Str; // 引数 ...: スマホ
4,837円あげるって言うからOCNモバイルOneにLinksmateから乗り換えたんですよ
これまでは僕はスマホの通信会社に、MVNOのLinksmateを使ってきました ...HashMap
created_by
はやぴ
Web/アプリ開発エンジニア
Sierにてお堅いB向けのソフトウェア開発を経て、現在はC向けのWebやアプリを中心に開発しています。
Utilities