0

複数の変数を 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 クエリをそのままにしておくことができます。

4

1 に答える 1

1

パラメータが 1 つしか表示されないため、正しく機能していません。$sqlValues が単一の文字列であると想定しています。(別名、それらすべてを ab 列に格納しようとしています)。

配列を使用する以外に方法はないと思いますが、

$rc = $stmt->bind_param("ssss", $user_input_ab, $user_input_cd, $user_input_ef, $user_input_gh);

(これはあなたが持っているものです)ははるかに簡単です。

于 2014-01-02T15:44:26.447 に答える