bind_param,无效对象或资源的重复出现问题

时间:2013-02-18 01:10:54

标签: php mysql sqlbindparameter

我遇到了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注入的最佳方法;这真的是我需要的所有安全吗? (我的意思是,在合理的范围内,我确信有更多的安全性,但这是一个小黄页类型的网站。)

1 个答案:

答案 0 :(得分:0)

好的,感谢@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。)我正在检索的每一列。工作就像一个魅力。