php-準備されたステートメントクエリが結果を返さない
データベースの行IDを別のページに送信し、それらのIDを使用して行をロードして処理する必要があります。正常に機能するセッション変数を使用しました。
$_SESSION['tmp'] = "50,51,52";
if ($stmt = $mysqli->prepare("SELECT id,jpg WHERE id = ?")) {
$stmt->bind_param("s",$_SESSION['tmp']);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result_id,$result_jpg);
if ($stmt->num_rows > 0) {
while($stmt->fetch()) {
$image = array($result_id => $result_jpg);
print_r($image."<br />");
}
} else {
echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
クエリは
になりますSELECT id、jpg WHERE id = 50,51,52
これはすべての行を返す必要がありますが、代わりに何も表示されておらず、エラーなどもありません。何か案は?
######編集#####
コードを更新しました:
//Generate the query $query = "SELECT id,jpg FROM images WHERE id IN (?"; for ($i=1; count($_SESSION['tmp']) > $i; $i++) { $query = $query.",?"; } $query = $query.")"; if ($stmt = $mysqli->prepare($query)) { for ($i=1; count($_SESSION['tmp']) > $i; $i++) { $b = $_SESSION['tmp'][$i]-1; $stmt->bind_param("s",$b); } $stmt->execute(); $stmt->store_result(); $stmt->bind_result($result_id,$result_jpg); if ($stmt->num_rows > 0) { while($stmt->fetch()) { $image = array($result_id => $result_jpg); print_r($image); } } else { echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error; } }
ループを実行できないようです
bind_param( "s"、50);
エラーが発生した場合:
警告:mysqli_stmt :: bind_param():変数の数が一致しません プリペアドステートメントのパラメータ数 C:\ xampp \ htdocs \ ppa \ add_sales.php、39行目
##### Edit 2 #####
これについての方法を変更しました。これは正常に機能します。
$image = array(); foreach($_SESSION['tmp'] as $x) { if ($stmt = $mysqli->prepare("SELECT id,jpg FROM images WHERE id = ?")) { $stmt->bind_param("s",$x); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($result_id,$result_jpg); if ($stmt->num_rows > 0) { while($stmt->fetch()) { $image[$result_id] = $result_jpg; } } else { echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error; } } } print_r($image);
答え :
解決策:
FROM
句を見逃しました-
$mysqli->error
をチェックした場合は、自分で知っているはずです WHERE id = 50,51,52
はvalidmysql構文ではありません- 代わりに
IN
演算子を使用する必要があります - プリペアドステートメントでは、
WHERE id = '50,51,52'
として評価されます。以上です。id
列は単一の文字列と比較されます。
答え :
解決策:
SELECT id,jpg WHERE id = 50,51,52
間違った記述です。
1)その場所にパラメータを書き込むことはできません。 where id = 50 or id = 51 or id = 52
2)FROMを見逃しました: FROM Table
これは正しいです:
SELECT id,jpg FROM table WHERE id = 50 or id = 51 or id = 52
答え :
解決策:
次のような方法を試すことができます: SELECT id,jpg FROM tablename WHERE id IN (50,51,52);
答え :
解決策:
すべてを個別にバインドする必要があります:
WHERE id IN (?, ?, ?)
バインド:
$stmt->bind_param("i", 50);
$stmt->bind_param("i", 51);
$stmt->bind_param("i", 52);
explode()
とループを使用して適切に実行する必要があります。また、適切な数の疑問符を生成するには、implodeを使用する必要があります。
$questionMarks = '(' . implode(',', array_fill(0, count($resultOfSplit), '?')) . ')';
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。