Intereting Posts
Запрос порядка запросов MySQL по значению в столбце JSON PHP Catchable fatal error: объект класса не может быть преобразован в строку Невозможно найти сценарий, перенаправляющий мобильный трафик в собственном веб-сайте WP Можно ли безопасно использовать str_replace в кодированной кодировке UTF-8, если в качестве аргументов заданы только строки с кодировкой UTF-8? Слияние аудио и изображений для создания видео с использованием php как реализовать сеанс входа в систему php или сеанс аутентификации Bandwith Speed ​​Boost Советы для серверов PHP5: выход и сжатие Zlib Включая snippit codeignifier на другом сайте Поиск регулярного выражения Mysql без повторяющихся символов Более динамичная страница с sitecake? Объект Json интегрируется с android Как проверить, является ли временной сдвиг в летнее время? Imagemagick устанавливает интерлайн-интервал? POST с использованием CURL в PHP дает неверный запрос Ошибка Использовать счетчик как часть переменной

Должен ли я передавать переменную $ mysqli для каждой функции?

У меня есть небольшая проблема, переходящая от mysql_ * к объектно-ориентированной mysqli.

Мой файл index.php структурирован как включающий два файла:

include('connect.php'); include('function.php'); 

Файл connect.php содержит:

 <?php $mysqli = new mysqli("localhost", "root", "test", "test"); if (mysqli_connect_errno($mysqli)) { printf("Connection failed: %s\n", mysqli_connect_error()); exit(); } ?> 

В файле function.php есть функция, называемая showPage, которая не принимает аргументов, но использует соединение $ mysqli , в строках вроде …

 $result = $mysqli -> query("SELECT * FROM $table ORDER BY ID DESC"); // Seleziono tutto il contenuto della tabella 

Я не могу справиться с этим, не переходя к функции переменной $ mysqli , но это не было необходимо, когда я использовал mysql_ * устаревшие функции!

Могу ли я понять, почему, и как лучше всего это решить?

Пользовательские функции имеют собственную область переменных в PHP. Вам нужно передать $mysqli в функцию в качестве параметра или запустить функцию с global $mysqli .

Эта точная проблема приведена в качестве примера на странице с областью переменных :

Однако в пользовательских функциях вводится локальная функция. Любая переменная, используемая внутри функции, по умолчанию ограничена областью локальных функций. Например, этот скрипт не будет выводить какой-либо вывод, потому что оператор echo ссылается на локальную версию переменной $ a, и ей не присваивается значение в этой области. Вы можете заметить, что это немного отличается от языка C в том, что глобальные переменные в C автоматически доступны для функций, если они не переопределены локальным определением. Это может вызвать некоторые проблемы в том, что люди могут непреднамеренно изменить глобальную переменную. В PHP глобальные переменные должны быть объявлены глобальными внутри функции, если они будут использоваться в этой функции.

 <?php $a = 1; /* global scope */ function test() { echo $a; /* reference to local scope variable */ } test(); ?> 

После лучшего поиска я нашел свой ответ, это для тех, кто может понадобиться:

PHP меняется на mysqli. Является ли mysqli_connection не глобальным?

Это был ответ, который мне нужен. Спасибо всем, кто помог мне

не может управлять им, чтобы работать, не переходя к функции переменной $ mysqli , но это не было необходимо, когда я использовал mysql_ * устаревшие функции!

Это не совсем правильно. Даже в старой функции mysql_* вам действительно нужно было передать идентификатор ссылки, если вам нужно указать, к какому соединению базы данных вы относились, например:

 $result = mysql_query($sql, $link); 

Также, что показывает этот пример, вам пришлось пройти и по $result . Если вы не $link параметр $link :

 $result = mysql_query($sql); 

Расширение mysql действительно выглядело внутренне для последнего использованного соединения. Если бы ни один не был найден, он создал новый с параметрами, установленными в php.ini. Это просто для вашей информации, чтобы лучше понять, почему и как это сработало в прошлом.

Вы также можете использовать пул соединений, стоит проверить это .

 $mysqli = new mysqli('p:localhost', 'username', 'password', 'db_name');