【问题标题】:Recurring issue with bind_param, invalid object or resource [duplicate]bind_param,无效对象或资源的重复问题[重复]
【发布时间】:2013-02-18 01:10:54
【问题描述】:

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()(之前也有过问题)。我在整张纸上都印有 echo $_GET['catName'],所以它通过了(曾经也有问题)。

另外,一个更元的问题,但有人告诉我使用 bind_param 是防止 SQL 注入的最佳方法;这真的是我需要的所有安全吗? (我的意思是,在合理的范围内,我确信安全性更高,但这是一个小型黄页类型的网站。

【问题讨论】:

  • echo $mysqli-&gt;error 告诉你什么?
  • 我不熟悉mysqli,因为我更喜欢PDO,但是你不应该使用从prepare返回的对象作为stmt对象吗?
  • @ExplosionPills 如果你先调用stmt_init(),不,这是正确的方法。不过,它似乎并不经常使用。
  • @MichaelBerkowski,什么都没有;在这些文件中,我使用一个带有我的连接凭据的文件作为 require_once,并且 if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " 。 $mysqli->连接错误; } 是其中的一部分。没有连接错误,另一个与此完全相同的文件可以很好地提取信息。
  • @MDWar 但是你在prepare() 之后打电话给$mysqli-&gt;error 吗?另外,你有理由使用stmt_init()吗?你可以只做$catSearch = $mysqli-&gt;prepare($catQuery); 然后检查if (!$catSearch) echo $mysqli-&gt;error;

标签: php mysql sqlbindparameter


【解决方案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.) 到我正在检索的每一列。像魅力一样工作。

【讨论】:

  • 啊,我正在输入答案。我不会打扰。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 2014-03-21
  • 1970-01-01
  • 2014-06-30
  • 2021-03-24
  • 2012-10-30
  • 2015-03-31
相关资源
最近更新 更多