0

私はPHPに比較的慣れておらず、バインディングの学習に取り組んでいます。バインド エラーが発生します。

「mysqli_stmt::bind_param(): 変数の数が、準備されたステートメントのパラメーターの数と一致しません」

if( isset( $_GET['last_name'],$_GET['id'] )) {
    $last_name = trim($_GET['last_name']);
    $id = trim($_GET['id']);
    $people = $db->prepare( "select firstName, last_name, id from people where last_name = ? or id >= ?");
    $people->bind_param('ssi', $first_name, $last, $id);
    $people->execute();
    $people->bind_result( $first_name, $last, $id );

bind_param 行でエラーが発生しています。文字列、文字列、整数を意味する「ssi」があり、3 つの変数があります。select には、正しく名前が付けられたフィールドが 3 つあります。「si」に変更していずれかの名前フィールドを削除すると、正常に動作します。 2 番目の文字列を追加しても機能しない理由がわかりません。

4

1 に答える 1

0

その節には 2 つの疑問符があります。

"last_name = ? または id >= ? のユーザーから firstName、last_name、id を選択"

(camelCases の firstName パラメータと下線付きの残りのパラメータに注意してください。問題を回避するために、1 つの命名規則に固執することをお勧めします)

つまり、 2つのパラメータをバインドしたいのですが、次の行で3つのパラメータを配置しようとしています

$people->bind_param('ssi', $first_name , $last_name, $id)

bind_param から$first_name変数を削除し、型から 's' を削除します。

これは次のようになります。

$people->bind_param('si', $last_name, $id)

注: $last および $first_name 変数は未定義です。

于 2014-06-28T13:40:18.680 に答える