PHP:新手问题 - 打开数据库

时间:2011-03-19 16:26:51

标签: php database

我为数据库处理编写了一些简单的函数,如下所示:

function dbOpen($db)
{
    $username = "admin";
    $password = "pass";
    $hostname = "localhost";    
    $db = mysql_connect($hostname, $username, $password)
}

function dbClose($db)
{
    mysql_close($db);
}

我想要做的是访问我传递给dbOpen函数的变量,如:

dbOpen($myDB);
$result = mysql_query('SELECT * FROM my_tbl',$myDB);

但是,由于某种原因,此功能不会初始化$myDB。有没有人有任何想法我做错了什么?

3 个答案:

答案 0 :(得分:6)

如果要这样做,则需要设置数据库函数以将该变量作为引用传递。 This here explains it.

答案 1 :(得分:4)

function dbOpen($db) { ... }不会影响传递给它的$db。如果您想这样做,您可以尝试通过引用传递,例如function dbOpen(&$db) { ... }

但更好的方法是返回刚刚打开的句柄。也就是说,而不是尝试设置$db,而只是设置return $db; - 而在调用它的代码中,就像$myDB = dbOpen();一样。 (注意,我没有提到dbOpen的参数 - 你不需要它,因为它的唯一目的是作为返回值。)

答案 2 :(得分:0)

虽然这可能不是您正在寻找的确切答案 - 并且可能有点矫枉过正 - 但我想解释一下如何使用PHP中的类来完成此操作。你会做这样的事情:

<?php

class Database {

    private $db;

    function __construct() {
        $username = "admin";
        $password = "pass";
        $host = "localhost";
        $this->db = mysql_connect($hostname, $username, $password);
    }

    function close() {
        mysql_close($this->db);
    }

    function query($sql) {
        return mysql_query($sql, $this->db);
    }

}

?>

__construct()函数被称为构造函数,并在您创建该类的新实例时运行。以下是创建和使用数据库类的新实例的示例:

<?php

$d = new Database();
echo $d->query('SELECT * FROM my_tbl');

?>

在基本术语中,->之后的箭头($d)表示您正在访问对象query中的方法$d(即您的数据库对象) )。希望这个“面向对象”的PHP对初学者来说不是太多信息 - 你可能想要阅读基础概念的this swift introduction