1

私は書籍データベースを持っており、mysqli と準備されたステートメントを使用して、DB バー 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
$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::execute

stmt::bind_result

stmt::フェッチ

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 に答える
2

CONDITIONは mysql の予約語なので、backicks を使用してエスケープする必要があります。

$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 に答える
-1

私も同じ問題を抱えていました。prepareQueryその理由は、メソッドで指定した列名がテーブルに含まれていないためです。

于 2016-12-09T08:18:10.020 に答える