2011-07-12 14 views
4
$stmt = $mysqli->prepare('select Un from member where Lock = ? and Activated = ?'); 
$stmt -> bind_param("ss", 'N', 'Y');//This line gave the error 
$stmt -> execute(); 
$stmt->store_result();//apply to prepare statement 
$numRows = $stmt->num_rows; 

if ($numRows > 0)//if have result 
while ($row = $stmt->fetch()) 

私の上記のコードは私に「非オブジェクトのメンバ関数bind_param()の呼び出し」エラーを与えた(できないが、研究にもかかわらず、解決するために) 。 私は本当になぜこのエラーを取得していない。私は正しいcols名を持っています。コールは

私はmysqliを初めて使い、このようなエラーをデバッグする方法を学びたいと思っています。

  1. 私のprepare文またはbind_param()の問題点は何ですか?
  2. はどのようにエラーが発生した場合、このようなエラー

答えて

0

mysqli_prepare()文オブジェクトを返すか、FALSEにデバッグを教えてください。

Source

$mysqli->prepare()は、FALSEを返す場合があります。その状況に対処する条件を書いてください。

14

Call to a member function bind_param() on a non-objectあなたはにbind_paramを呼び出そうとしている$stmtは、対象ではないことを意味します。なぜそれはオブジェクトではないのですか? $mysqli->prepareはオブジェクトを返さなかったためです。なぜオブジェクトを返さなかったのですか?

mysqli_prepare()エラーが発生した場合はステートメントオブジェクト、またはFALSEを返します。
http://www.php.net/manual/en/mysqli.prepare.php

だから、エラーが発生していなければならないことを意味します。 error_reportingをオンにするか、おそらくあなたに伝えるか、$mysqli->error()を調べてください。

+0

エラーがオンになり、それが言った「 あなたはあなたのSQL構文でエラーが発生している; 『?=ロック=と活性化』の近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください」 私は私のSQLが間違っている理由はまだ分かりません。 – Jerry

+1

@Jerry 'Lock'は[予約済みキーワード](http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html)です。 'WHERE \' Lock \ '= ...' – deceze

+0

ありがとう= D しかし、今は「参照でパラメータ2を渡すことができません」という別の問題があります。 私が知る限り、それは "Y"を参照していますか? 私は今何が間違っていますか? – Jerry

2
$stmt->bind_param("ss", 'N', 'Y');//This line gave the error 

データベースのデータ型については、ここで確認する必要があります。