Я написал несколько простых функций для обработки базы данных следующим образом:
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
. У кого-нибудь есть идеи, что я делаю неправильно?
Если вы хотите это сделать, вам нужно настроить свои функции базы данных, чтобы передать эту переменную в качестве ссылки. Это объясняет это.
function dbOpen($db) { ... }
не повлияет на переданный ему $db
. Если вы хотите это сделать, вы можете попробовать перейти по ссылке, например, function dbOpen(&$db) { ... }
.
Лучше, однако, было бы вернуть ручку, которую вы только что открыли. То есть вместо того, чтобы пытаться установить $db
, просто return $db;
– и в коде, вызывающем его, как $myDB = dbOpen();
, (Заметьте, я не упоминаю параметр dbOpen – вам это не нужно, поскольку его единственной целью было быть возвращаемым значением.)
Хотя это может и не быть точным ответом, который вы ищете, и может быть чрезмерным, я хотел бы объяснить, как вы можете сделать это с помощью классов в 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 не слишком много информации для новичка – вы можете прочитать это быстрое введение в основные понятия.