在 PHP PDO getaddrinfo 中创建 REST API 失败

creating REST API in PHP PDO getaddrinfo failed

我正在按照以下教程创建 REST API:

https://www.youtube.com/watch?v=pqEONSbXeSQ&t=2s

以下是我构建连接的方式 class:

<?php
  class Connect extends PDO 
  {
    public function __construct()
    {
      parent::__construct("mysql:host='xx.xxx.x.xx:4485';dbname='myDb'", 'myDb_user', 'myDb_password',
      array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
      $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $this->setAttribute( PDO::ATTR_EMULATE_PREPARES, false);
    }
  }
?>

这是我的 index.php,其中包含 API class:

<?php
  require_once __DIR__ . '/config.php';
  class API {
    function Select() {
      $db = new Connect;
      $users = array();
      $data = $db->prepare('SELECT * FROM users');
      $data->execute();
      while($OutputData = $data->fetch(PDO::FETCH_ASSOC)) {
        $users[$OutputData['username']] = array(
          'username' => $OutputData['username'],
          'fullname' => $OutputData['fullname'],
          'email' => $OutputData['email']
        );
      }
    }
  }

  $API = new API;
  header('Content-Type: application/json');
  echo $API->Select();
?>

使用上面的方法,我收到以下屏幕错误:

<br />
<b>Fatal error</b>:  Uncaught PDOException: PDO::__construct(): php_network_getaddresses: 
getaddrinfo failed: No such host is known.  in C:\Apache24\htdocs\mysite\config.php:7
Stack trace:
#0 C:\Apache24\htdocs\mysite\config.php(7): PDO-&gt;__construct('mysql:host='xx....', 
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect-&gt;__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API-&gt;Select()
#3 {main}

Next PDOException: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No 
such host is known.  in C:\Apache24\htdocs\mysite\config.php:7
Stack trace:
#0 C:\Apache24\htdocs\mysite\config.php(7): PDO-&gt;__construct('mysql:host='xx....', 
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect-&gt;__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API-&gt;Select()
#3 {main}
thrown in <b>C:\Apache24\htdocs\mysite\config.php</b> on line <b>7</b><br />

这是我第一次尝试使用 class 进行连接。我在其他网站上使用了相同的连接信息,连接到 dB 没有问题。

我做错了什么?

这不是你使用 PDO 构造函数的方式:

parent::__construct("mysql:host='xx.xxx.x.xx:4485';dbname='myDb'", 'myDb_user', 'myDb_password')

...除非您想连接到主机名为 'xx.xxx.x.xx:4485 的主机(这应该是无效的,因为主机名不应包含冒号)

删除引号,将端口添加为另一个选项:

parent::__construct("mysql:host=xx.xxx.x.xx;port=4485;dbname=myDb", 'myDb_user', 'myDb_password')

如果您需要其他配置标志,请参阅 documentation 了解有关如何使用它们的详细信息