【问题标题】:PDO to connect to web sql from localhost?PDO 从 localhost 连接到 web sql?
【发布时间】:2012-12-15 04:13:17
【问题描述】:

我正在尝试做一些测试,我正在使用 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 相同的凭据进行连接。

【问题讨论】:

  • 你能展示与 mysqli 一起使用的代码吗?

标签: php mysql pdo mysqli connection


【解决方案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

【讨论】:

  • 所以基本上是因为我试图从本地主机访问它,而不是与其关联的服务器将我锁定在外?这是有道理的,我可以在 localhost 中重新创建数据库
  • 你可以,这很合乎逻辑。在本地主机上您正在开发,在线您正在生产。如果一个开发错误给你的数据库带来了垃圾,你会很沮丧。
  • 是的,这是有道理的,我只是在测试检索数据,所以我打算跳过这一步,但我还是会继续做
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 如何检查要使用的端口?我从来不用 mysqli 输入一个。它会出现在我的设置中吗?
    • 您使用的是 Godaddy 共享主机?我认为然后mysql服务器正在本地unix套接字中侦听。看我的回答。您需要与 Godaddy 支持人员联系。
    【解决方案4】:

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

    localhost || 127.0.0.1

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 2020-10-30
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 2010-10-22
      • 2012-11-02
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多