@ chris85の助けを借りて動的mysqliクエリを作成しています。私はこれを作成することができます。Mysqli:mysqli_stmt :: bind_param():変数の数がプリペアドステートメントのパラメータの数と一致しません
<?php
require_once 'include/db.php';
$firstname = 'Alpha';
$lastname = 'Romeo';
$query = "SELECT * FROM users";
$cond = array();
$params = array();
if (!empty($firstname)) {
$cond[] = "fname = ?";
$params[] = $firstname;
}
if (!empty($lastname)) {
$cond[] = "lname = ?";
$params[] = $lastname;
}
if (count($cond)) {
$query .= ' WHERE ' . implode(' AND ', $cond);
}
echo $query;
$stmt = $mysqli->prepare($query);
if(!empty($params)) {
foreach($params as $param) {
$stmt->bind_param("s", $param);
echo $param;
}
}
$stmt->execute();
?>
私はこれを実行します。
SELECT * FROM users WHERE fname = ? AND lname = ?
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/u983213557/public_html/test.php on line 32
AlphaRomeo
なぜ失敗しているのかわかりません。この問題を解決するように私に助言してください。
を使用するようにバインドされていますbind_param() 'を一度に1つのparamでループします。あなたは、**すべての**パラメタと同時に '$ stmt-> bind_param()'を実行する必要があります。 – Sean
いいえ、それはできません;そうすれば、 ' - > bind_param'をループするだけで1つのバインド型になります。したがって、' foreach'を使用したときに 's'をスタックしませんでした。その問題に関する回避策はすでにたくさんあります。http://php.net/manual/en/mysqli-stmt.bind-param.php、そこにマニュアル入力を確認してください。 – Ghost
@Sean rodrigoご意見ありがとうございます。それはあなたが私にそれを修正する方法を助言することができますそれは非常に役に立つだろう。私は動的なクエリを作成しています。なぜなら、単純にバインドパラメータをハードコードできないからです。 – Ironic