在query()中的非对象上调用成员函数query()? [英] Call to a member function query() on a non-object in query()?

查看:165
本文介绍了在query()中的非对象上调用成员函数query()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

class MySQLDatabase {
    private $connection;

    function __construct(){
        $this->open_connection();
    }
    public function open_connection(){
        $this->connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
        if(!$this->connection){
            die("Database connection failed: ". mysql_error());
        }
        else {
            $db_select =  mysql_select_db(DB_NAME,$this->connection);
            if(!$db_select){
                die("Database connection failed: ". mysql_error());
        }
    }
}

public function close_connection(){
    if(isset($this->connection)){
        mysql_close($this->connection);
        unset($this->connection);
    }
}
public function query($sql){
    $result = mysql_query($sql,$this->connection);
    $this->confirm_query($result);
    return $result;
}
public function fetch_array($result_set){
    return mysql_fetch_array($result_set);
}
public function num_rows($result){
    return mysql_num_rows($result);
}
public function affected_rows(){
    return mysql_affected_rows($this->connection);
}
private function confirm_query($result){
    if(!$result){
        die("Database query failed: ". mysql_error());
    }
}       
}

$db = new MySQLDatabase();

这是另一位{read.php}

require_once("db.php");
class Read{
    private $table_name= "real_estate";
    private $column_name  = "Property_type";

    function __construct(){
    }
    public function pro_type() {
        global $db;
        var_dump($db);
        echo "<select name='".$this->column_name."'>";
        $sql = sprintf("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS  WHERE TABLE_NAME = '%s' AND COLUMN_NAME = '%s'",$this -> table_name,$this ->column_name);
        $result =  $db-> query($sql);
        $row = $db->fetch_array($result);
        $enumList = explode(",", str_replace("'", "", substr($row['COLUMN_TYPE'], 5, (strlen($row['COLUMN_TYPE'])-6))));
        foreach($enumList as $value)
            echo "<option value=$value>$value</option>";
        echo "</select>";
    }
}

link.php

require_once("read.php");
$link = new Read();

index.php

<?php
include '../inc/link.php'; 
$link -> pro_type();    
?>

每件事看起来都很完美,但是它给出了一条错误消息,指出正在对非对象调用查询.我实际上在另一个脚本中调用了$ db,但似乎没有任何作用.

Every thing seems perfect, but it gives an error message saying that a query is being called on a non object. I actually called $db in another script, but nothing seems to be working.

推荐答案

其他脚本中的调用是什么样的?应该是这样的:

What does the call in your other script look like? Should be something like this:

require_once('includes/mysql.php'); // Where your MySQLDatabase class resides
if(class_exists('MySQLDatabase')) {
    $db = new MySQLDatabase();
    // Should work from here
    $db->query("SELECT * FROM `table` WHERE 1");
} else {
    die('Unable to load class.');
}

这篇关于在query()中的非对象上调用成员函数query()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆