0

これが状況です。3つのPHPファイルをすべて同じプロジェクトフォルダーに作成しました。

  1. constants.php
  2. Mysql.php(クラス)
  3. index.php

index.phpを実行すると、次のようになります。

致命的なエラー:C:\ wamp \ www \ MyBlog \ MyClass \ MySql.phpの行#にある非オブジェクトでメンバー関数prepare()を呼び出す

constants.php:

<?php
//Define constent her
define('DB_SERVER', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'myblog');

Mysql.php:

<?php 

require_once 'constants.php';

class MySql{
        private $conn;
        protected $_query;

    function __constructert() {
        $this->conn = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME) or
        die("There was a probelm connecting the database");
        return $this->conn;
    }
    protected function _prepareQuery() 
   {
//her the line that problem come from beetwen the () of if : 
      if (!$stmt = $this->conn->prepare($this->_query)) {
         trigger_error("Problem preparing query", E_USER_ERROR);
      }
      return $stmt;
   }

    protected function _dynamicBindResults($stmt){
        $meta=$stmt->result_metadata();
        while ($field = $meta->fetch_field()) {
            print_r($field);
        }
    }

    function query($query){
        $this->_query = filter_var($query,FILTER_SANITIZE_STRING);
        $stmt = $this->_preparequery();
        $stmt->execute();
        $results=$this->_dynamicBindResults($stmt);
    }

index.php:

<? PHP
        include 'MySql.php';
        $Db= new MySql();
        $Db->query("select * from status");

私が言ったように、index.phpを実行すると、次のようになります。

致命的なエラー:オンラインのC:\ wamp \ www \ MyBlog \ MyClass \ MySql.phpにある非オブジェクトのメンバー関数prepare()を呼び出す

その行は次のとおりです。

if (!$stmt = $this->conn->prepare($this->_query)) {

詳細については、データベースへの接続をテストしましたが、問題ありません。_queryプロパティがSQLステートメントを受け取るかどうかをテストしました。

4

2 に答える 2

2

クラスのコンストラクタのMySQL名前は__constructert(); 正しいコンストラクタ名は__construct().

無効な名前を使用すると、行$Db = new MySQL();はオブジェクトを作成しますが、コンストラクターは呼び出されません。したがって、MySQL 接続/$connオブジェクトは作成されません。

于 2012-08-01T18:12:39.490 に答える
0

ここにタイプミスがあります->_preparequery();

次のように変更します。

function query($query){         
  $this->_query = filter_var($query,FILTER_SANITIZE_STRING);         
  $stmt = $this->_prepareQuery();         
  $stmt->execute();         
  $results=$this->_dynamicBindResults($stmt);     
} 
于 2012-08-01T18:12:00.937 に答える