【问题标题】:No such host is known-- Localhost not recognized不知道这样的主机——无法识别本地主机
【发布时间】:2015-10-04 15:04:15
【问题描述】:

我是 php 新手。我一直无法通过 PHP 连接和使用数据。我已经仔细检查并查看了这个网站的信息,但我没有找到太多。下面是错误和代码。

我输入了正确的用户名和密码。我什至创建了一个新的用户名和密码只是为了确保。我没有其他想法为什么它不会连接到我的本地主机。我很想看到任何关于可能出现的错误的反馈,谢谢!

错误显示:

警告:PDO::__construct(): php_network_getaddresses: getaddrinfo failed: 不知道这样的主机。在第 26 行的 C:\xampp\htdocs\website\Practice\mysqli\connection.inc.php 中

致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No such host is known。 ' 在 C:\xampp\htdocs\website\Practice\mysqli\connection.inc.php:26 堆栈跟踪:#0 C:\xampp\htdocs\website\Practice\mysqli\connection.inc.php(26): PDO ->__construct('mysql:host=$hos...') #1 C:\xampp\htdocs\website\Practice\mysqli\pdo.php(5): dbConnect('read') #2 {main} 抛出在第 26 行的 C:\xampp\htdocs\website\Practice\mysqli\connection.inc.php $result = $conn->query($sql)or die(mysqli_error());

connection.ini.php

function dbConnect($usertype, $connectiontype = 'mysqli') {
    $host = 'localhost';
    $db = 'student';
    if ($usertype == 'read') {
        $user = 'user';
        $pwd = 'pass';
    }

    elseif ($usertype == 'write') {
        $user = 'root';
        $pwd = 'password';
    }
    else {
        exit('Unrecognized connection type');
    }
    //Connection Code
    if ($connectionType == 'mysqli') {
        return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
        } 
else {

        try {
            return new PDO('mysql:host=$host;dbname=$db, $user, $pwd');
        }
        catch(PDOExecption $e) {
            echo 'Cannot connect to database';
            exit;
        }
    }
}
?>

mysqli.php

?php
require_once('connection.inc.php');
$conn = dbConnect('read');
$sql = 'SELECT * FROM guestbook';

$result = $conn->query($sql)or die(mysqli_error());
$numRows = $result->num_rows;
?>
<!DOCTYPE html>
<html>
<p> A total of <?php
echo $numRows;
?>
records were found.</p>
</html>

【问题讨论】:

标签: php mysql mysqli


【解决方案1】:

单引号括起来的字符串不会被解析,因此其中的变量不会被它们的值替换。在 DSN 字符串中使用双引号而不是单引号:

return new PDO("mysql:host=$host;dbname=$db, $user, $pwd");

【讨论】:

  • 感谢您解释错误所在,而不仅仅是指出解决方案!你得到了我的支持。
【解决方案2】:
function dbConnect($usertype, $connectiontype = 'mysqli') {
$host = 'localhost';
$db = 'student';
if ($usertype == 'read') {
    $user = 'user';
    $pwd = 'pass';
}

elseif ($usertype == 'write') {
    $user = 'root';
    $pwd = 'password';
}
else {
    exit('Unrecognized connection type');
}
//Connection Code
if ($connectionType == 'mysqli') {
    return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
    } 
else {

    try {
        return new PDO("mysql:host=$host;dbname=$db", $user, $pwd);
    }
    catch(PDOException $e) {
        echo 'Cannot connect to database';
        exit;
    }
}
}
?>

你正在使用

 return new PDO('mysql:host=$host;dbname=$db, $user, $pwd');

但是你需要使用双引号来使用像

这样的变量
return new PDO("mysql:host=$host;dbname=$db", $user, $pwd);

或者你可以使用这个:

return new PDO('mysql:host='.$host.';dbname='.$db, $user, $pwd);

您可以在此处查看更多信息:Pdo ConnectionVariable inside double quotes

【讨论】:

  • 恭喜,你是唯一没有写错代码的人。
  • 谢谢!我不认为我会在那里出错。我现在可以使用 PDO 访问数据库了。
  • Np,我想通知您,您在 catch() 中拼错了 PDOException
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2012-01-02
  • 1970-01-01
  • 2013-07-03
相关资源
最近更新 更多