Соединение PDO с базой данных MySQL отклонено

Я пытаюсь подключиться к моей базе данных NearlyFreeSpeech MySQL. Я могу войти через PHPMyAdmin, но не через PDO. Я использую этот код

$dbconn = new PDO('mysql:host=127.0.0.1;dbname='.$config['db'].'; port=3307', $config['user'], $config['pass']); 

Где $ config определяется в отдельном файле. Ошибка, которую я получаю:

 Warning: PDO::__construct() [pdo.--construct]: [2002] Connection refused (trying to connect via tcp://127.0.0.1:3307) Error: SQLSTATE[HY000] [2002] Connection refused 

и затем в конечном итоге

 Fatal error: Call to a member function query() on a non-object in... 

Если я использую

 mysql:host=localhost 

Ошибка, которую я получаю

 Error: SQLSTATE[HY000] [2002] No such file or directory 

Теперь я предполагаю, что «Соединение отказалось» лучше, чем «Нет такого файла или каталога», но я не знаю, куда идти отсюда. Любая идея, почему это происходит? Спасибо за помощь.

Попробуйте мои существующие функции и постоянные переменные, вы также можете изменить эти константы на переменную массива, которую вы имеете.

 define("SERVER_SQL_VERSION","mysql"); define("SQL_SERVER","localhost"); define("SQL_PORT","3306"); define("SQL_USERNAME","root"); define("SQL_PASSWORD",""); define("SQL_DB_NAME","db"); if(!function_exists('pdoConnect')) { function pdoConnect() { $pdo = new PDO(SERVER_SQL_VERSION.":host=".SQL_SERVER.";dbname=".SQL_DB_NAME."", "".SQL_USERNAME."", "".SQL_PASSWORD.""); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); return $pdo; } } 

Может возникнуть проблема с вашей конкатенацией, это должно работать …

Я также разделил SERVER_SQL_VERSION и добавил функции, чтобы проверить, доступен ли драйвер … Я использую программное обеспечение XAMPP, и только mysql и sqlite активны, если вы / другие пытаетесь использовать postgresql и т. Д., Которые должны также работайте.

 if(!function_exists('check_sql_version')) { function check_sql_version() { $sql_available = false; //make it false yet foreach(PDO::getAvailableDrivers() as $key => $val) { if(SERVER_SQL_VERSION == $val) { $sql_available = true; } } //check now if sql_available is true or false if($sql_available == true) return true; else return false; } } 

Поэтому следует рассмотреть образец:

 if(!check_sql_version()) { echo '('.SERVER_SQL_VERSION.') is not available, you only have this drivers:<br/>'; foreach(PDO::getAvailableDrivers() as $key => $val) { $key = $key + 1; echo $key.') '.$val.'<br/>'; } exit(); //exit and dont proceed } $stmt = pdoConnect()->prepare("SELECT * FROM accounts"); $stmt->execute(); 

Я надеюсь, что это помогает!