1

以下のこのクラスを使用して、SQLデータベースに接続します。すべてが順調ですが、私はそれを適切な方法で使用していないと思います。私のウェブサイトにページが読み込まれると、テキストやスポンサーなどを表示するためにいくつかの関数が呼び出され、各関数がmysqlオブジェクトを作成します。違いますか??接続の問題が多すぎる可能性はありますか?1つのオブジェクトを作成し、それを関数のパラメーターとして渡す必要がありますか?または、このオブジェクトをグローバルにする方法はありますか?

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;
    }
}
4

2 に答える 2

2

オブジェクトを 1 回インスタンス化して、クエリ メソッドを数回呼び出すことができるはずです。クエリごとに接続できないようにする必要があります。

$mysql = new clsMysql();

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

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

$mysql->fxQuery("Yet another query...");
于 2012-10-02T02:15:25.647 に答える
0

簡単な方法で:

// 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();
    }

}

extend他のクラスでは、クラスを行うことができますsystem

// 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');
于 2012-10-02T05:53:52.403 に答える