在 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->__construct('mysql:host='xx....',
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect->__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API->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->__construct('mysql:host='xx....',
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect->__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API->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 了解有关如何使用它们的详细信息
我正在按照以下教程创建 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->__construct('mysql:host='xx....',
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect->__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API->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->__construct('mysql:host='xx....',
'myDb_user', 'myDb_passwo...', Array)
#1 C:\Apache24\htdocs\mysite\index.php(5): Connect->__construct()
#2 C:\Apache24\htdocs\mysite\index.php(23): API->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 了解有关如何使用它们的详细信息