0

php / mysqliの単純な検索を起動して実行しようとしていますが、機能していないようです。以前の質問(リンク)で見つけたいくつかの指示に従いましたが、それでも機能しません。

$sql = 'SELECT product_title FROM product ';
$where = array();
$values = array();
$types = '';

if (isset($_GET['searchText']) and $_GET['searchText'] != '') {
    $where[] = 'WHERE product_title = ?';
    $values['titel'] = $_GET['searchText'];
    $types .= 's';
}

if (isset($_GET['searchCategorySelect']) and $_GET['searchCategorySelect'] != '') {
    $where[] = 'WHERE product_categoryid = ?';
    $values['category'] = $_GET['searchCategorySelect'];
    $types .= 's';
}

$sql .= implode(' AND ',$where);
$values = array_unshift($values, $types);

$search_stmt = $mysqli->prepare($sql);
$search_stmt->bind_param($values);
$search_stmt->execute();

その結果、次のエラーメッセージが表示されます:「mysqli_stmt :: bind_param()in...のパラメータカウントが間違っています。」

いくつかのアドバイスや助けをいただければ幸いです。

4

1 に答える 1

2

mysqli_stmt :: bind_paramは最低2つのパラメーターを想定していますが、1つを渡しています

構文:

bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

どこ

パラメータ:パラメータ識別子。名前付きプレースホルダーを使用するプリペアドステートメントの場合、これは:name形式のパラメーター名になります。疑問符のプレースホルダーを使用して準備されたステートメントの場合、これはパラメーターの1インデックスの位置になります。

変数: SQLステートメントパラメーターにバインドするPHP変数の名前。

data_type: PDO ::PARAM_*定数を使用したパラメーターの明示的なデータ型。ストアドプロシージャからINOUTパラメータを返すには、ビット単位のOR演算子を使用して、data_typeパラメータのPDO::PARAM_INPUT_OUTPUTビットを設定します。

length:データ型の長さ。パラメーターがストアード・プロシージャーからのOUTパラメーターであることを示すには、長さを明示的に設定する必要があります。

次のようにすることもできます。

$values = array_unshift($values, $types);
call_user_func_array (array ($search_stmt, 'bind_param'), $values);         
$search_stmte->execute();
于 2012-09-04T20:08:44.540 に答える