ポイントを絞れないまま質問して回答を得られなかったので、再度、聞きたいことポイントを絞って質問します。
mysqliの手続き型で、データベースを更新したいケースで、mysqli_stmt_bind_param関数にわたす引数を配列で持ってしまっており、それを展開した形で引数に渡したいです。現状では下記の湯なエラーになってタイプ属性の文字数と与えた引きの数が合わないというエラーになります。
FatalError
1Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables
前回の質問で教えていただいたことをやってみたのですが、そもそもよく考えてみると、以下の自分のコードでは、根本的に、実際には配列の中身をmysqli_stmt_bind_param関数の第三引数以降に展開できていないと思うのです。どうすればうまく渡せるでしょうか?getParam関数内で、標準出力の書き出しではだめのような気がするのですが。
PHP
1 $link = mysqli_connect(DB_HOST, DB_USER, DB_USER_PASS, DB_NAME); 2 $sqlBase = "UPDATE jirei SET name = ?, age = ?, addr = ? WHERE id = ?;"; 3 $columnP = "sisi"; 4 $params = ['Mike',23,'Tokyo', 56] 5 6 function getParam(...$list) { 7 foreach ($list as $val) { 8 echo $val."<br>"; 9 } 10 } 11 12 function test1($callable, $arr) { 13 return call_user_func_array($callable, $arr); 14 } 15 16 if ($stmt = mysqli_prepare($link, $sqlBase)) { 17 mysqli_stmt_bind_param($stmt, $columnP, test1("getParam", $params)); 18 mysqli_stmt_execute($stmt); 19 $stmt_error = mysqli_stmt_error($stmt); 20 if ($stmt_error !== "") { 21 var_dump($stmt_error); 22 exit(); 23 } 24 mysqli_stmt_close($stmt); 25 } else { 26 echo 'dame'; 27 exit(); 28 }
pho.netより
mysqli_stmt_bind_param() と call_user_func_array() を組み合わせて使う場合は注意が必要です。
mysqli_stmt_bind_param() へのパラメータは参照渡しでなければなりませんが、 call_user_func_array() には変数のリストをパラメータとして渡すことができます。 この変数は参照であっても値であってもかまいません。
↑このこともクリアしていると思うのですが・・・

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/02 03:04