PDO从localhost连接到Web sql?

时间:2012-12-30 20:07:44

标签: php mysql pdo mysqli connection

我正在尝试进行一些测试,我正在使用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 个答案:

答案 0 :(得分:1)

您的mysql服务器正在侦听本地unix socket 或绑定到 localhost 127.0.0.1)。确保mysql服务器正在侦听hostname的外部IP地址。

注意:连接用户(此处为user)必须具有来自您的客户端IP(GRANT)的访问权限(somedb);

答案 1 :(得分: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

答案 2 :(得分:0)

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

$dbh = new PDO("mysql:host=$dbhost;port=PORT;dbname=$dbname", $dbuser, $dbpass);

答案 3 :(得分:0)

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

localhost || 127.0.0.1