複数の変数を 1 つに結合した php 変数を使用し、その変数をバインド パラメータで使用すると、機能せず、エラーが表示されます。
説明させてください:
投稿データ、SQL 列、SQL テーブルの詳細を次のような変数に格納しています。
$user_input_ab = $_POST['ab'];
$user_input_cd = $_POST['cd'];
$user_input_ef = $_POST['ef'];
$user_input_gh = $_POST['gh'];
$sqlTable = 'abcd_list';
$sqlColumns = 'ab, cd, ef, gh';
$sqlValues = $user_input_ab .','. $user_input_cd .','. $user_input_ef .',' . $user_input_gh;
SQL Prepare ステートメントは次のようになります。
$stmt = $mysqli->prepare("INSERT INTO $sqlTable ($sqlColumns) VALUES (?, ?, ?, ?)");
上記はこれまでのところ機能します。$sqlValues
しかし、bind ステートメントで結合変数を使用すると、機能しません。
$rc = $stmt->bind_param("ssss", $sqlValues);
上記は機能しません。次のエラーが発生します。
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of elements in type definition string doesn't match number of bind variables
しかし、bind_param をこれに変更すると、次のように動作します。
$rc = $stmt->bind_param("ssss", $user_input_ab, $user_input_cd, $user_input_ef, $user_input_gh);
では、なぜ機能しないのですか?エラーは、要素の数が一致していないことを示していますが、 を使用する$sqlValues
と、その中に 4 つの要素を入力する必要がありますか?
なぜ私が変数を使用しているのか疑問に思っている場合は、将来の編集を容易にするためであり、残りの SQL クエリをそのままにしておくことができます。