PHP: mysqli_connect — нет такого файла или каталога при использовании сокета localhost

#php #mysql #mysqli #unix-socket

#php #mysql #mysqli #unix-сокет

Вопрос:

Я выполняю миграцию с mysql на mysqli.В настоящее время на моем сервере одновременно запущены pdo, mysql и mysqli. Также PHP 5.6.34 запущен в docker. Версия MySQL 10.2.16-MariaDB-регистрирует сервер MariaDB, который запущен на хост-компьютере. ОПЕРАЦИОННАЯ СИСТЕМА — CentOS Linux 7.

Скрипт для подключения к базе данных:

   if($mysqli){//never works
    $res  = $GLOBALS["___mysqli_ston"] = mysqli_connect("localhost",  "user",  "pass" , NULL, 0, 'var/sockets/mysql.sock');
  }
  else{//always works
    $res  = mysql_connect(':/var/sockets/mysql.sock', "user", "pass" ); 
  }
  if (!$res){ 
    die("err");  
  }  
  

Подключение к БД с помощью mysql работает нормально. Но каждый раз, когда я пытаюсь подключиться к БД с помощью mysqli, получаю следующую ошибку:

( ! ) Предупреждение: mysqli_connect(): (HY000/2002): нет такого файла или каталога в /var/www/html/Lib_SQL.php в строке 20

Строка 20:

$res = $GLOBALS[«___mysqli_ston»] = mysqli_connect(«localhost», «user», «pass», NULL, 0, ‘var/sockets/mysql.sock’);

Я уже установил сокет по умолчанию в файле php.ini:

mysql.default_socket => /var/mysql/mysql.sock

Я также заметил, что принудительное подключение TCP / IP к базе данных не вызывает этого предупреждения, например:

 $res  = $GLOBALS["___mysqli_ston"] = mysqli_connect("hostname.com",  "user",  "pass" , NULL, 0, 'var/sockets/mysql.sock');
  

Итак, как мне использовать mysqli_connect для подключения к моей базе данных с использованием локального сокета unix? Есть какие-нибудь подсказки?

Комментарии:

1. Какая строка является строкой 20 ? Также избегайте использования $GLOBALS .

2. Существует огромная разница между /var/sockets и var/sockets

3. Кроме того, $dbName параметр должен быть пустой строкой, а не null

Ответ №1:

Вы делаете это неправильно.

Попробуйте приведенный ниже код. Измените учетные данные базы данных на ваши

 <?php
         $dbhost = 'localhost';
         $dbuser = 'db username here';
         $dbpass = 'db -password here';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

         if(! $conn ){
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully';
         mysqli_close($conn);
      ?>