我为数据库处理编写了一些简单的函数,如下所示:
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
。有没有人有任何想法我做错了什么?
答案 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。