/ カート テーブルには 4 つのフィールドがあります。ID、ユーザー名、製品 ID、画像。すべてのデータをテーブルに表示しようとしています。
<?php
$query = "SELECT * FROM cart WHERE user_name='$username'";
if ($stmt = mysqli_prepare($mysqli, $query)) {
/* execute statement */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt,$username);
/* fetch values */
while ($row=mysqli_stmt_fetch($stmt))
{
私が見る限り、ここには 2 つの問題があります。
mysqli_stmt_bind_param()
です。クエリに変数を直接挿入することは安全ではありません。これが、クエリを準備する理由です。mysqli_stmt_bind_result()
。これは、選択する列の正確な数である必要があります。これを機能させるに?
は、クエリで変数の代わりにプレースホルダーを使用する必要があります (および を使用しますmysqli_stmt_bind_param()
)。また、特定の列を選択する必要があり、実行しないでくださいSELECT *
。そうした場合SELECT *
でも、同じ量の結果をバインドすれば機能させることができますが、後で列を 1 つ追加するとコードが壊れます。
以下のこのコードは、特定の列を選択するように変更されており、mysqli_stmt_bind_result()
. クエリにプレースホルダーが追加され、使用法がmysqli_stmt_bind_param()
実装されました。
$query = "SELECT id, user_name, produc_id, image FROM cart WHERE user_name=?";
if ($stmt = mysqli_prepare($mysqli, $query)) {
mysqli_stmt_bind_param("s", $username);
/* execute statement */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $user_id, $username, $product_id, $image);
/* fetch values */
while ($row=mysqli_stmt_fetch($stmt)) {
// Fetch here
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加