Функция PHP для подключения mysqli дает ошибку

Более новый для создания php-функций и mysql. У меня есть функция для подключения к базе данных db_conect_nm (). Это находится в файле db_fns.php и содержит пользователя и пароль для подключения к моему db. Я создал это, чтобы иметь более безопасное соединение db. Я получил его в директории за пределами public_html и получил ошибку PHP Warning: mysqli::mysqli() [<a href='mysqli.mysqli'>mysqli.mysqli</a>]: (28000/1045): Access denied for user 'negoti7'@'localhost' (using password: NO) ...

В поисках решений я увидел комментарии, которые указывали, что, возможно, у этого пользователя db не было разрешения от root, поэтому я поместил его в каталог в public_html, тот же каталог, что и программа, где он вызывается. Я все равно получаю ту же ошибку.

Я тестировал соединение, не будучи функцией, и он работает. Что не так, и почему это не работает как функция? Я действительно хочу поставить это где-то, кроме кода, и сделать его более безопасным.

Содержание db_fns.php

 <?php //Database server $host= 'localhost'; $nm_name= 'myname_databasename'; //sanitized data $nm_user= 'myname_dbusername'; $nm_pword= 'password'; // db connect to nm database function db_connect_nm() { $nm_connect = new mysqli($host, $nm_user, $nm_pword, $nm_name); if (!$nm_connect) throw new Exception('Could not connect to NM database currently'); else return $nm_connect; } ?> 

Я называю это от nm_functions.php, там включен db_fns.php.

nm_functions.php

 <?php require_once('sanitizedpathto/db_fns.php'); ......some code $conn_nm = db_connect_nm(); $result_sub = $conn_nm->query("select * from subscribers where uname='$username'"); .... more code ?> 

Есть идеи? благодаря

Related of "Функция PHP для подключения mysqli дает ошибку"

Может ли это быть областью переменных? Вы пытались определить переменные внутри функции для тестирования?

Как это:

 <?php // db connect to nm database function db_connect_nm() { //Database server $host= 'localhost'; $nm_name= 'myname_databasename'; //sanitized data $nm_user= 'myname_dbusername'; $nm_pword= 'password'; $nm_connect = new mysqli($host, $nm_user, $nm_pword, $nm_name); if (!$nm_connect) throw new Exception('Could not connect to NM database currently'); else return $nm_connect; } 

?>

Вы :

  • сначала, объявляя некоторые переменные, вне любых функций
  • затем, пытаясь использовать эти переменные изнутри функции.

Переменные, объявленные вне функции, по умолчанию не видны внутри этой функции.

Об этом вам следует прочитать раздел « Область переменных » руководства.

Два возможных решения:

  • Используйте ключевое слово global , чтобы импортировать эти переменные в вашу функцию, делая их видимыми
  • Или определите константы , а не переменные – что имеет смысл, для значений конфигурации.

В первом случае ваша функция будет выглядеть так:

 // db connect to nm database function db_connect_nm() { // Make these outside variables visible from inside the function global $host, $nm_user, $nm_pword, $nm_name; $nm_connect = new mysqli($host, $nm_user, $nm_pword, $nm_name); if (!$nm_connect) throw new Exception('Could not connect to NM database currently'); else return $nm_connect; } 

И во втором случае вы должны сначала define константы:

 define('DB_HOST', 'localhost'); define('DB_DBNAME', 'myname_databasename'); define('DB_USER', 'myname_dbusername'); define('DB_PASSWORD', 'password'); 

И затем используйте эти константы:

 // db connect to nm database function db_connect_nm() { $nm_connect = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DBNAME); if (!$nm_connect) throw new Exception('Could not connect to NM database currently'); else return $nm_connect; } 

Это второе решение, вероятно, более чистое, чем первое 😉

Переменные соединения не связаны внутри функции подключения. Вам либо нужно передать их как параметры функции (предпочтительнее), либо использовать global ключевое слово внутри для ссылки на них:

 function db_connect_nm($host, $nm_user, $nm_pword, $nm_name) { $nm_connect = new mysqli($host, $nm_user, $nm_pword, $nm_name); //etc... } 

Альтернативный, не предпочтительный:

 function db_connect_nm() { global $host, $nm_user, $nm_pword, $nm_name; $nm_connect = new mysqli($host, $nm_user, $nm_pword, $nm_name); //etc... }