0

我正在尝试做一些测试,我正在使用 MAMP 并尝试连接到我服务器上的 SQL 数据库。我以前没有使用过 PDO,并且很难追踪错误代码的含义。我得到这个:

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'hostname' (60)

我的连接功能:

  function getConnection() {
    $dbhost="hostname";
    $dbuser="user";
    $dbpass="password";
    $dbname="somedb";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
  }

我在哪里尝试执行查询:

  function getTypes() {
    $sql = "SELECT id, name FROM type";
    try {
      $db = getConnection();
      $stmt = $db->query($sql);
      $types = $stmt->fetchAll(PDO::FETCH_OBJ);
      $db = null;
      echo '{"wine": ' . json_encode($types) . '}';
    } catch(PDOException $e) {
      echo '{"error":{"text":'. $e->getMessage() .'}}';
    }
    echo 'getTypes';
  }

编辑:我可以使用与 mysqli 相同的凭据进行连接。

4

4 回答 4

1

您的 mysql 服务器正在侦听本地 unix 套接字或绑定到localhost ( 127.0.0.1)。确保 mysql 服务器正在侦听hostname.

注意:连接用户(user此处)必须GRANT从您的客户端 IP 访问()数据库(somedb);

于 2012-12-30T20:09:09.600 回答
1

这是一个安全问题。为了避免您的数据库被淹没或充满垃圾,配置设置说“只有本地 ip 可以访问数据库”。所有共享主机都这样做,如果您有专用服务器,这样做是一个好习惯。

在 Linux 上的 /var/mysql/my.conf 中,你有类似的东西:

skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
于 2012-12-30T20:15:56.837 回答
0

您是否连接到正确的端口?

$dbh = new PDO("mysql:host=$dbhost;port=PORT;dbname=$dbname", $dbuser, $dbpass);
于 2012-12-30T20:13:49.787 回答
0

如果你运行 PHP 脚本的服务器是运行 SQL Server 的服务器,你不需要使用hostname连接,你需要参考本地系统。您在配置中拥有的hostname内容不会解析为有效 SQLServer 的 IP,如果您在其中引用localhost,它将引用正在运行的服务器本身,并按照需要进行连接。您可以使用以下任一方法:

localhost||127.0.0.1

于 2012-12-30T20:19:27.413 回答