2017-02-17 11 views
-1

ユーザー入力が実行時に説明がデータベースかではないとのメッセージを与えるが、私はこのエラーを取得していたコードを実行する場合:キャッチ可能な致命的なエラー:クラスmysqliのオブジェクトは、行21のC: xampp htdocs VSC dbcontroller.phpの文字列に変換できませんでした

Catchable fatal error: Object of class mysqli could not be converted to string in C:\xampp\htdocs\VSC\dbcontroller.php on line 21

をマイdbcontroller.phpコードは次のとおりです。

<?php 
class DBController { 
    private $host = "localhost"; 
    private $user = "root"; 
    private $password = ""; 
    private $database = "voipswitch"; 

    function __construct() { 
     $conn = $this->connectDB(); 
     if(!empty($conn)) { 
      $this->selectDB($conn); 
     } 
    } 

    function connectDB() { 
     $conn = mysqli_connect($this->host,$this->user,$this->password); 
     return $conn; 
    } 

    function selectDB($conn) { 
     mysqli_select_db($this->$conn,database);// Line no 21 
    } 

    function runQuery($query) { 
     $result = mysqli_query($query); 
     while($row=mysqli_fetch_assoc($result)) { 
      $resultset[] = $row; 
     }  
     if(!empty($resultset)) 
      return $resultset; 
    } 

    function numRows($query) { 
     $result = mysqli_query($query); 
     $rowcount = mysqli_num_rows($result); 
     return $rowcount; 
    } 
} 
?> 

あなたが必要な場合、私はまた、コードをcheck_availability.php貼り付けますこれも。

<?php 
//error_reporting(0); 
require_once("dbcontroller.php"); 
$db_handle = new DBController(); 


if(!empty($_POST["enum_description"])) { 
    $result = mysqli_query("SELECT count(*) FROM enumroots WHERE description='" . $_POST["enum_description"] . "'"); 
    echo $result; 
    //die(); 
    $row = mysqli_fetch_row($result); 
    $user_count = $row[0]; 
    //$user_count = $row['id_route']; 
    echo $user_count; 

    if($user_count>0) { 
     //die('xxx'); 
     echo "<span class='status-not-available'> Description Not Available.</span>"; 
    }else{ 
     //die('yyy'); 
     echo "<span class='status-available'> Description Available.</span>"; 
    } 
} 
?> 
+1

こんにちは、21行目のデータベースの$ database in-placeを使ってテストしましたか? – Sourabh

+0

あなたは '$'サインインデータベースを忘れました。それは 'mysqli_select_db($ this-> $ conn、$ database);' –

+0

でも$サインを与えることは友人.....を働かない.....( –

答えて

0

あなたが呼ばれるプライベートフィールドの値を格納していると$databaseあなたselectDB機能は$this->databaseを使用して値にアクセスする必要があります。

function selectDB($conn) { 
    mysqli_select_db($conn, $this->database);// Line no 21 
} 

更新:あなたのクラスは物事を保存する場所について非常に混乱しています。 $conn(ローカルメソッド)と$this->conn(クラスレベル)を組み合わせて一致させることはできません。彼らは同じことではありません。

クラスを確認して、それぞれの変数に対してメソッドレベルの変数を使用するかクラスのプロパティを使用するかを決定してください。

私の答えのコードを確認すると、メソッドに渡される引数$connが使用されていることがわかります。これは決して割り当てられていない$this->connとは異なり、値を持ちます(実際には$this->databaseではなく、$databaseを使用した問題の反対です)。

+0

これも働いていません.... :( –

+0

@P。私はいくつかの説明文を追加しましたが、本質的には、ローカル変数が同じ名前であっても、クラスのフィールドやプロパティと同じではないことを認識する必要があります。 '$ this-> conn!= $ conn'と '$ database!= $ this-> database'。 – Fenton

+0

ありがとう......それは動作します............. :)もう一度おかげで..... –

関連する問題