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