2

私はこの問題を抱えてbind_paramいますが、何が問題なのかわかりません:

<?php
$mysqli = new mysqli("$host","$user","$pass","$db");
if(isset($_GET['catName'])) {
    $category = "%" . $_GET['catName'] . "%";
}

//setup query
$catSearch = $mysqli->stmt_init();

//search values
$catQuery = "SELECT lister_id,
             logo_file_name,
             listing_name,
             street_address,
             city,
             state,
             zip

      FROM listers

      INNER JOIN listings

      ON listers.lister_id = listings.lister_id

      WHERE listings.listing_category LIKE ?";

$catSearch->prepare($catQuery);
$catSearch->bind_param('s', $category);
$catSearch->bind_result($id, $imgfile, $name, $address, $city, $state, $zip);
$catSearch->execute();
$catSearch->store_result();
$mainRows = $catSearch->num_rows();
?>

私が得ている警告は次のとおりです。

Warning: mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt in C:\wamp\www\RP\catSearch.php on line 29

そして、私を殺しているのは、この正確な構文が 7 つまたは 8 つの他のドキュメントを同じようにまとめていることですが、何らかの理由でこれは壊れ続けています。私は各テーブルをチェックしましたが、それらは良好です (これは、これが最後に発生したときの問題でした)。私は、stmt_init()他の何よりも先に自分の健康を宣言していることを確認しています(以前にも問題がありました)。シート全体にエコーが$_GET['catName']印刷されているので、通り抜けています(そこでも問題がありました)。

また、よりメタな質問ですが、bind_param を使用することが SQL インジェクションを防ぐ最善の方法であると言われました。本当に必要なセキュリティはこれだけですか? (つまり、当然のことながら、セキュリティが強化されていると確信していますが、これは小さなイエロー ページ タイプのサイトです)。

4

1 に答える 1