Php 其他服务器上的数据库(MySQL)

Php 其他服务器上的数据库(MySQL),php,mysql,Php,Mysql,我在编写网站代码时遇到问题。我已经做了很多研究,但我真的不知道该怎么办 function getDB() { $dbHost = 'otherserver'; $db = 'database'; $dbUser = 'user'; $dbPass = 'blibla'; $db = new PDO("mysql:host=$dbHost;dbname=$db;charset=utf8mb4", $dbUser, $dbPass); return $db; } 我不知道为什么,但如果我

我在编写网站代码时遇到问题。我已经做了很多研究,但我真的不知道该怎么办

function getDB() {
$dbHost = 'otherserver';
$db     = 'database';
$dbUser = 'user';
$dbPass = 'blibla';

$db = new PDO("mysql:host=$dbHost;dbname=$db;charset=utf8mb4", $dbUser, $dbPass);
return $db; }

我不知道为什么,但如果我尝试使用localhost,它会起作用。如果我更改我的($dbHost='123.123.123')MySQL服务器,它就会停止。为什么?我真的不知道。请帮助我。

您需要创建一个新的MySQL用户并授予权限,以允许远程连接到您的数据库

大概是这样的:

CREATE USER 'user'@'otherserver' IDENTIFIED BY PASSWORD 'blibla';
GRANT ALL ON *.* TO 'user'@'otherserver';

您需要创建一个新的MySQL用户并授予特权,以允许远程连接到您的数据库

大概是这样的:

CREATE USER 'user'@'otherserver' IDENTIFIED BY PASSWORD 'blibla';
GRANT ALL ON *.* TO 'user'@'otherserver';

在安装MySQL的机器上,您应该配置远程访问。位于
/etc/my.ini
中的linux系统配置文件上

打开它并找到部分
[mysqld]
。 确保行
跳过网络
已注释(或删除行),并添加以下行:

bind-address = <HERE_YOUR_IP>

查看更多详细信息。

在安装MySQL的机器上,您应该配置远程访问。位于
/etc/my.ini
中的linux系统配置文件上

打开它并找到部分
[mysqld]
。 确保行
跳过网络
已注释(或删除行),并添加以下行:

bind-address = <HERE_YOUR_IP>

查看更详细的信息。

如果您在代码中添加一些错误检查,很可能您将获得一些信息,帮助您诊断此问题,或者至少获得一条错误消息,帮助这里的人准确了解问题所在

所以,像这样更改代码,当连接出现问题时,它会生成一条可用的错误消息

function getDB() 
{
    $dbHost = 'otherserver';
    $dbname = 'database';
    $dbUser = 'user';
    $dbPass = 'blibla';

    try {
        $db = new PDO("mysql:host=$dbHost;dbname=$dbname", $dbUser , $dbPass );

        /*** set the PDO error mode to exception ***/
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4'");

    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
        exit;
    }
    return $db;
}

$con = getDB();

foreach ($con->query('SHOW TABLES') as $row) {
    print_r( $row );
}

如果您在代码中添加一些错误检查,您很可能会得到一些信息来帮助您诊断这个问题,或者至少会得到一条错误消息来帮助这里的人准确地理解错误所在

所以,像这样更改代码,当连接出现问题时,它会生成一条可用的错误消息

function getDB() 
{
    $dbHost = 'otherserver';
    $dbname = 'database';
    $dbUser = 'user';
    $dbPass = 'blibla';

    try {
        $db = new PDO("mysql:host=$dbHost;dbname=$dbname", $dbUser , $dbPass );

        /*** set the PDO error mode to exception ***/
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4'");

    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
        exit;
    }
    return $db;
}

$con = getDB();

foreach ($con->query('SHOW TABLES') as $row) {
    print_r( $row );
}


服务器是否设置为允许远程主机连接?默认情况下,大多数是不允许的。我会非常小心允许从万维网直接访问您的数据库,数据库是非常有趣的目标,根据您的设置,您可能希望使用数据库web api而不是直接连接。服务器是否设置为允许远程主机连接?默认情况下,大多数都不是。我会非常小心,不允许从万维网直接访问您的数据库,数据库是非常有趣的目标,根据您的设置,您可能希望使用数据库web api,而不是直接连接。非常感谢,我做了所有事情,但我仍然无法访问我的数据库。有什么想法吗?请多解释一下你的情况。您无法从脚本获取access数据库,对吗?数据库是否位于试图连接到它的脚本之外的另一台服务器上?是的,没错,我可以在phpmyadmin上使用我的用户名、密码和主机名进行访问,但如果我尝试运行脚本,则只有在选择localhost时它才能工作。我不知道为什么。非常感谢。我做了一切,但仍然无法访问我的数据库。有什么想法吗?请多解释一下你的情况。您无法从脚本获取access数据库,对吗?数据库是否位于试图连接到它的脚本之外的另一台服务器上?是的,没错,我可以在phpmyadmin上使用我的用户名、密码和主机名进行访问,但如果我尝试运行脚本,则只有在选择localhost时它才能工作。我不知道为什么。我添加了它,但现在我在第26行的/test/test/webs/test/php/test.php中得到了一个新的错误解析错误:语法错误,意外的“catch”(T_catch)。mb您的代码有问题吗?}catch(PDO异常$e){Ah,可能是因为我使用了
$db
来保存数据库名称和PDO连接。我的错误,粗心。尝试新代码。我使用我拥有的数据库运行此代码,它工作正常。是的,但我的脚本仍然没有运行:(知道吗?好吧,因为我可以访问远程服务器。)(在网络中的另一台电脑上)使用该代码,问题一定是您没有在远程服务器上创建允许该用户帐户从远程位置连接的用户帐户。您收到的错误消息是什么?您是否确定在
$dbHost
中使用了正确的IP地址?我添加了该地址,但现在我收到了一个新的错误解析错误:语法错误,u第26.mb行的/test/test/webs/test/php/test.php中的nexpected'catch'(T_catch)代码中有什么错误?}catch(PDO异常$e){啊,这可能是因为我使用了
$db
来保存数据库名称和PDO连接。我的错误,粗心。尝试新代码。我使用我拥有的数据库运行了此代码,它工作正常。是的,但我的脚本仍然没有运行:(知道吗?好吧,因为我可以访问远程服务器(在我网络中的另一台PC上)使用该代码,问题一定是您没有在远程服务器上创建允许该用户帐户从远程位置连接的用户帐户。您收到的错误消息是什么?另外,您是否确定您在
$dbHost
中使用了正确的IP地址?我尝试过但仍然不工作我等待RiggsFolly,直到他回答回答我的问题。还是谢谢你!我试过了,但仍然没有工作。我等着RiggsFolly回答我的问题。还是谢谢你!