PDO从本地主机连接到web sql


PDO to connect to web sql from localhost?

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

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

My connection function:

  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连接。

这是安全问题。为了避免数据库被淹没或被垃圾填充,配置设置说"只有本地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

mysql服务器要么监听本地unix套接字,要么绑定到localhost (127.0.0.1)。请确保mysql服务器正在监听hostname的外部IP地址。

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

您连接到正确的端口吗?

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

如果运行PHP脚本的服务器是运行SQL server的服务器,则不需要使用hostname连接,需要引用本地系统。在你的配置中,hostname不会解析到一个有效的SQLServer的IP,如果你引用localhost,它会引用正在运行的服务器本身,并连接它需要的方式。您可以使用以下任意一种:

localhost || 127.0.0.1