【问题标题】:Call to a member function bind_result() on a non-object in ... on line 17在第 17 行对 ... 中的非对象调用成员函数 bind_result()
【发布时间】:2013-06-12 08:23:54
【问题描述】:

我有一个书籍数据库,使用 mysqli 和准备好的语句我正在选择数据库栏 1 中的所有字段。原因是错误

在第 17 行的 C:\xampp\htdocs\registersite\phpscripts1\mysqli11.php 中的非对象上调用成员函数 bind_result()

如果我错过了该字段,我没有任何问题,只要我添加它就会得到错误。

数据库本身比较简单,一共13个字段,PK就是id。大多数字段都是 varchar。

  1. png screenshot of DBase
  2. Database file link

导致问题的数据库字段是字段 12,条件。它被设置为 varchar(10),但是一旦我将它引入 SELECT 语句,它就会在工作中抛出一个扳手,抛出上面的错误。

如果有人能告诉我为什么其他领域工作正常,但这个只会导致问题,我将不胜感激。


这是相关的代码部分。第 17 行是 bind_result 调用。

include 'connectvariables2.php';
$conn = new mysqli(DB_HOST, DB_USER, DB_PSWD, DB_NAME) or die("error");

$stmt = $conn->prepare("SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,cdincluded,condition,notes FROM books ORDER BY id ASC");

var_dump($stmt);

$stmt->bind_result($id,$subject,$section,$topic,$subtopic,$title,$publisher,$authors,$isbn13,$isbn10,$cd,$cond,$notes);
$stmt->execute();
$stmt->store_result();

【问题讨论】:

  • 如果有人需要,这里是另一个链接 3。View Source prior to error
  • 请在此处发布您的代码
  • My Code - 我不得不创建指向 pastebin 的链接,因为它不允许我在这里粘贴,说太长了。
  • @BaffledBeyondBelief 请在此文本上发布您的整个查询块。此错误通常是指输入错误的查询。检查引用的表、列是否存在...如果您选择某一行,请确保您引用的数据存在。
  • @BaffledBeyondBelief 然后将相关代码发布到您的问题中,您的调试过程应将其缩小到引发此错误的行。如果您还没有缩小范围,我建议您开始调试过程,然后用您的发现更新您的问题

标签: php mysql mysqli boolean


【解决方案1】:
$stmt = $conn->prepare("SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,cdincluded,‌​condition,notes FROM books ORDER BY id ASC"); var_dump($stmt);

$stmt->bind_result($id,$subject,$section,$topic,$subtopic,$title,$publisher,$au‌thors,$isbn13,$isbn10,$cd,$cond,$notes);

 $stmt->execute(); 

$stmt->store_result();

以上是您提供的当前代码。您正在执行正确的步骤以从数据库中检索数据,但执行过程的顺序错误。您应该阅读有关如何正确绑定结果和存储结果的文档。以下是您的执行过程的样子:

$stmt = $conn->prepare("");
$stmt->execute();
$stmt->bind_result();
$stmt->fetch();

但您正在尝试存储结果,因此将$stmt->fetch() 替换为

$stmt->store_result();

Stmt::prepare

stmt::execute

stmt::bind_result

stmt::fetch

stmt::store_result


关于添加另一个引用列时的查询.. condition 是 mysql 中的保留关键字.. 您需要对其进行转义,因此您的查询将是:

SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,
                        cdincluded,`condition`,notes FROM books ORDER BY id ASC

【讨论】:

  • @jeroen 我不知道你在说什么;)+1 指出保留字
  • 好的,所以按照您关于获取和存储的建议,保存重新加载,错误现在指向 $stmt->execute();带有 bool(false) 致命错误:在第 16 行的 C:\xampp\htdocs\registersite\phpscripts1\mysqli12.php 中的非对象上调用成员函数 execute()
  • @BaffledBeyondBelief 有点愚蠢的问题要问。但我应该,你是否将编辑后的查询添加到 $stmt->prepare(); 中?非对象通常指的是不存在的引用
  • @BaffledBeyondBelief 如果您的代码以前可以使用,那么它应该可以使用添加的字段以及您转义该字段。
  • @BaffledBeyondBelief 一个不错的小调试行是在脚本顶部添加:mysqli_report(MYSQLI_REPORT_ALL);。这将给出准确的错误消息
【解决方案2】:

CONDITION 是 mysql 中的 reserved word,所以你需要使用反引号来转义它:

$stmt = $conn->prepare("SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,
                        cdincluded,`condition`,notes FROM books ORDER BY id ASC");

【讨论】:

  • Jeroen,非常感谢,我忘记了保留字和检查。这解决了问题,现在一切正常。
【解决方案3】:

我遇到了同样的问题。原因是我的表不包含我在prepareQuery 方法中指定的列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2016-05-24
    相关资源
    最近更新 更多