Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在类外的函数中重用MySQL对象_Php_Mysql_Class - Fatal编程技术网

PHP在类外的函数中重用MySQL对象

PHP在类外的函数中重用MySQL对象,php,mysql,class,Php,Mysql,Class,我使用下面的这个类来连接我的sql数据库。一切都很好,但我认为我没有正确使用它。当一个页面加载到我的网站上时,会调用一些函数来显示文本、赞助商。。。每个函数创建一个mysql对象。错了吗??它是否会造成连接过多的问题?我应该创建一个对象并为函数传递一个参数吗??或者有没有办法使这个对象成为全局对象 class clsMysql { var $con; var $last_id; function __construct($db = array()) {

我使用下面的这个类来连接我的sql数据库。一切都很好,但我认为我没有正确使用它。当一个页面加载到我的网站上时,会调用一些函数来显示文本、赞助商。。。每个函数创建一个mysql对象。错了吗??它是否会造成连接过多的问题?我应该创建一个对象并为函数传递一个参数吗??或者有没有办法使这个对象成为全局对象

class clsMysql
{
    var $con;
    var $last_id;

    function __construct($db = array()) 
    {
        $this->con = mysql_connect($db['host'], $db['user'], $db['pass'], true, MYSQL_CLIENT_INTERACTIVE) or die ('Error connecting to MySQL');
        mysql_select_db($db['db'], $this->con) or die('Database ' . $db['db'] . ' does not exist!');
    }

    function __destruct() {
        mysql_close($this->con);
    }

    // fonction qui exécute la requête SQL
    function fxQuery($sql) {
        return mysql_query($sql, $this->con);
    }

    // fonction qui retourne la variable du résultat de la requête SQL
    function fxGetVar($sql) {
        return $this->fxFetchArray(0, $sql);
    }

    // fonction qui retourne un tableau contenant la ligne unique du résultat de la requête SQL
    function fxGetRow($sql) {
        return $this->fxFetchArray(1, $sql);
    }

    // fonction qui retourne un tableau contenant le résultat de la requête SQL
    function fxGetResults($sql) {
        return $this->fxFetchArray(2, $sql);
    }

    // fonction qui met la requête dans un tableau
    function fxFetchArray($p, $sql)
    {
        $qry = $this->fxQuery($sql);
        $nb = mysql_num_rows($qry);
        $this->last_id = mysql_insert_id($this->con);

        if ($nb > 0)
        {
            switch ($p)
            {
                // fxGetVar
                case 0:
                    $rec = mysql_fetch_array($qry, MYSQL_NUM);
                    $mem_results = $rec[0];
                    break;

                // fxGetRow
                case 1:
                    $rec = mysql_fetch_array($qry, MYSQL_ASSOC);

                    foreach (array_keys($rec) as $field)
                        $mem_results[$field] = $rec[$field];
                    break;

                // fxGetResults
                case 2:
                    $ctr = 1;

                    while ($rec = mysql_fetch_array($qry, MYSQL_ASSOC))
                    {
                        foreach (array_keys($rec) as $field)
                            $mem_results[$ctr][$field] = $rec[$field];

                        $ctr++;
                    }
            }

            return $mem_results;
        }
        else
            return null;
    }

    //fonction pour échapper les caractères pour les variables post ou get
    //param: valeur
    //retourne la valeur échappée
    function fxEscape($values)
    {
        if (is_array($values))
            $values = array_map(array($this, 'fxEscape'), $values);
        else
        {
            // Stripslashes
            if (get_magic_quotes_gpc())
                $values = stripslashes($values);

            if ((int)ini_get('magic_quotes_sybase'))
                $values = str_replace("''", "'", $values);

            $values = mysql_real_escape_string($values, $this->con);
        }

        return $values;
    }

    function fxGetLastId() {
        return $this->last_id;
    }
}

您应该能够实例化一次对象,并多次调用查询方法。它应该防止它为每个查询建立连接

$mysql = new clsMysql();

$mysql->fxQuery("select * from something");

$mysql->fxQuery("Another Query");

$mysql->fxQuery("Yet another query...");
以一种简单的方式:

// on the top of your code
$db = new clsMysql();
然后,在类方法或函数中:

// class
class abc {

    public function xyz () {
        global $db;            // make it global here

        // use it!
    }
}
另一方面,更多OOP:

// main class
class system {

    // variable to the store database object
    public $db;

    // constructor
    public function __constructor() {

        include('mysql.class.php');    // your mysql class file

        $this->db = new clsMysql();
    }

}
在其他类上,您可以
扩展
系统

// sample class
class sample extends system {

    // sample function
    public function sample_method() {

        $this->db->fxQuery('SELECT * FROM table');

}
在课堂之外:

$app = new system();
$result = $app->db->fxQuery('SELECT 1');

添加
$GLOBALS['db']=new clsMysql()
在主脚本的顶部,并在所有函数中使用
$GLOBALS['db']
。谢谢,这解决了我的问题