使用不同的PHP版本从服务器B上的PHP mysqli访问服务器A上的MySql数据库

I'm trying to figure out, how is possible to retrieve records from MySql database tables, located on the server A, which is PHP Version 5.3.29 from server B php mysqli PHP Version 7.2.8

I found this example How to Connect to the Remote MySQL Database using PHP, but I don't understand, how it works in relation to what I'm trying to do, doubt if it is what I'm looking for

I'm new with php, and all that I can imagine, I should be to use connection data from server A for php mysqli on server B, and add access host IP of server B in Remote MySQL of server A, and seems like I have to add database user and password in MySQL databases on server A, but I'm not sure, where do I have to get it on server B

Server A:

Version by phpinfo();: PHP Version 5.3.29

Database server

Server: Localhost via UNIX socket
Server type: MySQL
Server version: 5.6.39 - MySQL Community Server (GPL)
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)

Web server

cpsrvd 11.70.0.51
Database client version: libmysql - 5.1.73
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 5.6.30

phpMyAdmin

Version information: 4.7.7

Server B:

Version by phpinfo();: PHP Version 7.2.8

Database server

Server: Localhost via UNIX socket
Server type: MariaDB
Server version: 5.5.56-MariaDB - MariaDB Server
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)

Web server

nginx/1.11.10
Database client version: libmysql - mysqlnd 5.0.11-dev - $Id: 
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 5.6.30

phpMyAdmin

Version information: 4.6.6

Any advice, guide or example would be very helpful

Edit:

My attempt by answer, first of all I've added IP of server B in Remote MySQL on server A. My conn.php, located on Server B to connect to Server A:

<?php
$servername = "Server_A_IP";
$username = "Server_A_database_user";
$password = "Server_A_database_user_password";
$db = "Server_A_database";

$conn = new mysqli($servername, $username, $password, $db);
$conn->set_charset('utf8');

if(!$conn)
{
    die ("Error on the Connection" . $conn->connect_error);
}
?>

and dbtab.php also located on Server B with conn.php in same folder:

<?php
 include 'conn.php';
$sql = "SELECT * FROM tab";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html>
    <h1 align="center">Database</h1>
    <table border="1" align="center" style="line-height:25px;">
    <tr>
    <th colspan="2">Records</th>
    </tr>
    <tr>
    <th bgcolor="#ff897f">id</td> 
    <th bgcolor="#ff897f">name</td>   
    </tr>
<?php
if($result->num_rows > 0)
{
   while($row = $result->fetch_assoc())
   {
    ?>
     <tr>
        <td bgcolor="#e5cac8"><?php echo $row['id']; ?></td>
        <td bgcolor="#e5cac8"><?php echo $row['name']; ?></td>
    <?php
   }
}
else
{
    ?>
    <tr>
    <th colspan="2">There's No data found!!!</th>
    </tr>
    <?php 
}
?>
</body>
</html>

but in result, when I'm tying to open www.site.com/folder/dbtab.php or www.site.com/folder/conn.php, page does not load, just freezes

ping of Server A:

enter image description here

douqu2712
douqu2712 您好,我已编辑过问题
大约 2 年之前 回复
douao7937
douao7937 除非您构建一个API来抽象数据库层,否则PHP在服务器A上无关紧要。您只想直接连接到远程服务器上的MySQL服务器......
大约 2 年之前 回复
douti0467
douti0467 我认为更重要的是你在两台服务器上有什么版本的mysql(?)
大约 2 年之前 回复

1个回答



您不需要服务器A上的php。 您只需将MySQL服务器(服务器A)配置为</ p>


  1. 允许网络访问(通过IP地址)和</ li>
  2. 创建一个 服务器B的IP地址的MySQL帐户</ li>
    </ ol>

    如果您已设置此项,则可以使用</ p> \从服务器B上的php创建连接 n

    $ mysqli = new mysqli(“&lt;服务器A的IP&gt;”,“用户”,“密码”,“数据库”); </ code> </ p>

    请参阅优秀的php网站: mysqli Connections < / p>

    步骤1,2取决于您的MySQL服务器。 如果您具有直接root访问权限,则需要编辑配置文件并允许联网,否则它取决于托管服务。</ p>

    要创建具有远程访问权限的用户帐户,请发出以下SQL语句( 或使用Web GUI):</ p>

    GRANT&lt; Rights&gt; ON&lt; db-name&gt;。* TO'用户名'@'&lt;服务器B的IP&gt;'; </ code> </ p>

    请参阅有关向用户授予权限的MySql手册:< a href =“https://dev.mysql.com/doc/refman/5.5/en/grant.html"rel =”nofollow noreferrer“> https://dev.mysql.com/doc/refman/5.5/en /grant.html </ p>
    </ div>

展开原文

原文

You don't need php on Server A for this. You just need to configure your MySQL Server (Server A) to

  1. allow network access (via IP-addresses) and
  2. create a MySQL Account for the IP-address of Server B

If you have set up this you can create a connection from php on Server B by using

$mysqli = new mysqli("<IP of Server A>", "user", "password", "database");

see the excellent php website on this: mysqli Connections

The steps 1, 2 depend on your MySQL Server. If you have direct root access you need to edit the configuration files and allow networking, otherwise it depends on the hosting service.

To create a user account with remote access issue the following SQL statement (or use a web GUI):

GRANT <Rights> ON <db-name>.* TO 'username'@'<IP of Server B>';

see the MySql manual on granting privileges to users: https://dev.mysql.com/doc/refman/5.5/en/grant.html

doupian6118
doupian6118 M. Biegert好吧,我想,我必须标记你的答案,因为这个故障出现在特定服务器A和B上,但同样的情况适用于另一个从服务器B到服务器C,我必须弄清楚服务器A有什么问题 ,好像是防火墙,但我无法访问设置。 谢谢你的支持
大约 2 年之前 回复
dongzhi9574
dongzhi9574 这是托管的MySQL实例吗? 在这种情况下,您应该联系您的主机提供商。 如果服务器A上的MySQL实例仅用于服务器A(它看起来像它),那么你就无法从服务器B直接连接到它。在这种情况下,你确实需要创建一个带有例如php的抽象层,你可以 从网上查询。 但是,由于您需要确保请求经过身份验证并且没有任何SQL注入,因此您的任务会涉及更多。 如果达到这一点,可能值得考虑重新考虑您的设置。
大约 2 年之前 回复
dsfs64664
dsfs64664 Biegert我添加了ping结果连接失败了telnet www.mysite.com 3306
大约 2 年之前 回复
douwu8060
douwu8060 啊,我明白了。 然后这听起来像连接错误。 也许某些防火墙阻止访问服务器A? 尝试从服务器B ping它,如果有效,请参阅,如果你可以连接到MySql端口(通常是3306),例如 由nmap -p 3306 <服务器A>
大约 2 年之前 回复
dongzhihong3940
dongzhihong3940 这就是它的完成方式。
大约 2 年之前 回复
doukan4795
doukan4795 是的,但错字仅在这篇文章中,在服务器上我在两个文件中都有相同的conn,我已经检查过,同样的结果。 好像它不是失败的原因,有时我在加载后得到错误504 =(
大约 2 年之前 回复
dsd57259
dsd57259 要回答你的编辑:你在dbtab.php中输错了。 第4行缺少变量名$ conn中的n;)
大约 2 年之前 回复
doubipeng1336
doubipeng1336 您好,我已经尝试按照您的指南,我已经编辑了我的问题,请检查,我不确定我做错了什么
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐