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

-1

好的,感谢@michaelberkoski 和这里另一个页面的一些帮助,我发现了这个问题。因为两个表都包含 lister_id,所以它抛出了一个错误,我将查询更改为:

$catQuery = "SELECT listers.lister_id,
             listers.logo_file_name,
             listers.listing_name,
             listers.street_address,
             listers.city,
             listers.state,
             listers.zip

      FROM listers

      INNER JOIN listings

      ON listers.lister_id = listings.lister_id

      WHERE listings.listing_category LIKE ?";

我在哪里添加表格。(listers.) 到我正在检索的每一列。像魅力一样工作。

于 2013-02-18T01:32:16.493 回答