2012-03-14 9 views
0

私は、メインファイル(作成時)のテキストボックスの横に置かれるラベルを見つけるはずのphpで書かれたクラスを持っています。基本的に、クラスは自分のDBを検索して、選択された図形(メインページから渡される)のラベルを探します。ダミー値を使用して関数を実行すると、$ dbConnection値が値を設定していないかのようになります。 $ dbConnectionが定義されていないというエラーが表示され、関数が特定のパラメータ型を予期していますが、指定された型がnullであるというエラーが表示されます。私が見ると、彼らはすべて$ dbConnection変数を指しています。私のクラスには、次のようになります。変数が値を設定していません

class lblFinder 
     { 
      //declarations 
       private $dbConnection; 
       private $dbName="matecalculator"; 

       private $cmd=""; 
       private $size=0; 
      //end of declarations 
      public function __construct() 
      { 
       $this->dbConnection=mysql_connect("localhost", "root", ""); 
      } 

      public function setSize($shape) 
      { 
       if($this->dbConnection===false) 
       { 
        echo "<p>Something went wrong.</p><p> Error Code:".mysql_errno().": ".mysql_error()."</p>"; 
       } 
       else 
       { 
        if(mysql_select_db($this->dbName,$this->dbConnection)) 
        { 
         $cmd="SELECT COUNT(varID) FROM tblvariables WHERE shapeID IN(SELECT shapeID FROM tblshapes WHERE shapeName='$shape')"; 
         $qryResults=mysql_query($cmd,$dbConnection); 

         //get results 
         while (($Row = mysql_fetch_row($qryResults)) !== FALSE) 
         { 
          $size=$Row[0]; 
         } 

         mysql_free_result($qryResults); 
        } 
        else 
        { 
         echo "<p>Something went wrong.</p><p> Error Code:".mysql_errno().": ".mysql_error()."</p>"; 
        } 
       } 
      } 

      public function getSize() 
      { 
       return $this->size; 
      } 

      public function setLabels($shape) 
      { 
       //declarations 
        $l=array(); 
       //end of declarations 

       $this->cmd="SELECT varDesc FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '".$shape."')"; 
       $qryResults=mysql_query($cmd,$dbConnection); 

       $i=0; 
       if(($Row = mysql_fetch_row($qryResults)) !== FALSE) 
       { 
        $l[i]=$Row[0]; 
        $i++; 
       } 
       mysql_free_result($qryResults); 
       return $l; 
      } 
     } 

だけでキックと笑いのために、ここでは(ダミーの値を渡します)私のテストファイルです。私はラウンドがDBからの有効な値であることを知っているので、それは問題ではないことは分かっています。

$arr=array(); 
     $lf=new lblFinder; 
     $lf->setSize("Round"); 
     echo "Size=".$lf->getSize(); 
     $arr=$lf->setLabels("Round"); 
     $i=0; 
     foreach($arr AS $label) 
     { 
      echo "Label $i is $label"; 
     } 
+0

正確なエラーメッセージを完全に入力してください。 – deceze

+0

正確なエラーは、C:\ wamp \ www \ matePrecisionCalc \ lblFinder.phpの37行目のdbConnectionです。mysql_query()は、パラメータ2がリソースであることを期待しています、C:\ wamp \ www \ matePrecisionCalc \ lblFinder.php mysql_fetch_row()は、パラメータ1がリソースであることを期待しています。これはC:\ wamp \ www \ matePrecisionCalc \ lblFinder.phpの40行目にあります(ループ内にあるかのように何度も繰り返されています) – Cityonhill93

答えて

1

あなたのためにここ訂正あなたのクラスのタイプミス/バグがあり、次のように

public function setLabels($shape) 
     { 
      //declarations 
       $l=array(); 
      //end of declarations 

      $this->cmd="SELECT varDesc FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '".$shape."')"; 
      $qryResults=mysql_query($cmd,$dbConnection); 

      $i=0; 
      if(($Row = mysql_fetch_row($qryResults)) !== FALSE) 
      { 
       $l[$i]=$Row[0]; // The $ symbol was missing from the i 
       $i++; 
      } 
      mysql_free_result($qryResults); 
      return $l; 
     } 

また、単純化のためには、あなたがこれを記述することができ:

public function setLabels($shape) 
     { 
      //declarations 
       $l=array(); 
      //end of declarations 

      $this->cmd="SELECT varDesc FROM tblVariables WHERE shapeID IN(SELECT shapeID FROM tblShapes WHERE shapeName= '".$shape."')"; 
      $qryResults=mysql_query($cmd,$dbConnection); 

      if(($Row = mysql_fetch_row($qryResults)) !== FALSE) 
      { 
       $l[]=$Row[0]; // Do not need to increment index of array, php does automatically 
      } 
      mysql_free_result($qryResults); 
      return $l; 
     } 

接続がnullを返す場合、接続中に発生したエラーを次のように出力して、その問題のトラブルシューティングを行うことができます。

$this->dbConnection=mysql_connect("localhost", "root", "") or die("Error connecting to DB: " . mysql_error()); 

EDIT
die()は、PHPスクリプトの実行を停止します。このような場合、デバッグには便利です。スクリプトの残りの部分を実行したり、エラーの束をダンプしたりすることができないからです(現在のようなことです)。 mysql_connect("localhost", "root", "") or die(mysql_error());は、接続が成功しなかった場合はをスクリプトに伝えます。は、PHPスクリプトを停止し、mysqlエラーを出力するため、トラブルシューティングのための情報があります。

問題の1つは、私たちに行番号を教えているが、上に引用したコード内の行はどれですか?行番号で、PHPはどこにエラーが発生しているかを正確に伝えています。どのラインが37と40であるか教えていただけますか? setSize機能とsetLabels機能で

+0

私の間違い。正確なエラーは dbConnection in C:\ wamp \ www \ matePrecisionCalc \ lblFinder.php 37行目 mysql_query()は、パラメータ2がリソースであることを期待しています。C:\ wamp \ www \ matePrecisionCalc \ lblFinder.php 37行目 mysql_fetch_row()は、パラメータ1がリソースであることを期待しています。C:\ wamp \ www \ matePrecisionCalc \ lblFinder.phpの40行目にあります(これはループのように何度も繰り返しています – Cityonhill93

+0

ちょうど好奇心から、die()関数は何をしますか? – Cityonhill93

+0

私の答えの編集を見てください。 –

0

あなたは$this->cmd$this->dbConnectionを使用しなければならないとき、あなたは$cmd$dbConnectionを参照。

どちらの関数でも、ローカル変数$dbConnectionは定義されていません。

また、@cale_bが指摘したように、ループ内にiのタイプミスがあり、or die()を使用すると、残りのスクリプトの実行を停止できます。このクラスの使用方法によっては、PHPのすべての実行を停止するのではなく、エラーを返すほうが良いかもしれません。それをしたい場合は、次のようなことをすることができます:

$this->dbConnection = mysql_connect("localhost", "root", ""); 
if (!$this->dbConnection) 
    return "error"; 
関連する問題