1

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

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

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

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

  1. DBase的png截图
  2. 数据库文件链接

导致问题的数据库字段是字段 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();
4

3 回答 3

2

CONDITION是 mysql 中的保留字,因此您需要使用反引号对其进行转义:

$stmt = $conn->prepare("SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,
                        cdincluded,`condition`,notes FROM books ORDER BY id ASC");
于 2013-06-16T02:48:00.060 回答
2
$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::准备

stmt::执行

stmt::bind_result

stmt::fetch

stmt::store_result


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

SELECT id, subject,section,topic,subtopic,title,publisher,authors,isbn13,isbn10,
                        cdincluded,`condition`,notes FROM books ORDER BY id ASC
于 2013-06-16T02:47:32.980 回答
-1

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

于 2016-12-09T08:18:10.020 回答