Intereting Posts
Полоса пропускания в поле адреса в PHP mysqli_stmt :: bind_result (): Число переменных привязки не соответствует количеству полей в подготовленном сообщении Apache Mod_Rewrite Расшифровать mcrypt с помощью openssl У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' '') 'в строке 2 Комментарии PHP # vs // Как создать прокси-сервер PHP / Node для визуализации внешних http-изображений на веб-сайте https? вывод php-запроса сохранить как текстовый файл Каков алгоритм анализа выражений в нотации infix? Согласование целевой команды обработки « » недопустимо Как отслеживать время пользователя на сайте Использование REGEXP внутри подготовленного оператора mysqli в PHP Как обрабатывать частичный HTML? Запросы на поиск мест в заданном лат / lng Пагинальный список файлов в php

PHP: вопрос новичков – открытая база данных

Я написал несколько простых функций для обработки базы данных следующим образом:

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 не слишком много информации для новичка – вы можете прочитать это быстрое введение в основные понятия.