【问题标题】:How can I connect to a mysql server from a php page using Synology?如何使用 Synology 从 php 页面连接到 mysql 服务器?
【发布时间】:2018-01-24 05:25:05
【问题描述】:

我有一台旧的 Synology 设备(DSM v5.2-5967 Update 4,phpmyadmin v4.4.7-0103),它有一些本地网站,其中包含工作 php 页面。我想将此迁移到我的新 Synology 设备(DSM V6.1.3-15152 Update 1,phpmyadmin v4.6.6-0172)。从套件中心安装新版本的 phpmyadmin 时,我还需要下载 Maria DB 和 PHP 5.6,而这在 DSM 5 中不是必需的。此外,DSM 6 现在支持 Web Station 中的选项,我可以在其中配置http后端服务器和PHP版本。我将其设置为 5.6,即与 phpmyadmin 一起安装的版本。

这是在旧 DSM 中为我工作的代码:

<?php
define ("DB_HOST", "localhost"); // Your database host name
define ("DB_USER", "root"); // Your database user
define ("DB_PASS", ""); // Your database password
define ("DB_NAME", "groceries"); // Your database name

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database");
?>

此代码现在返回“无法建立连接”。其他不处理此问题的站点会返回 500 服务器错误。我尝试将 localhost 替换为 Synology 设备的名称,但无济于事。 PHP 文件本身工作正常,但我无法连接到数据库。我在任何地方都看不到 Maria DB 的控制面板,所以我不知道我是否缺少任何设置。这是一台新设备,安装了全新的软件包,所以我什至还没有更改 root 密码。

我什至尝试从 Package Center 安装 Apache 2.4,并在新的 Web Station 设置中将其设置为后端服务器,然后重新启动 NAS。但 phpyadmin 仍将“nginx/1.11.10”显示为 Web 服务器。作为参考,我的旧 NAS 在 web server 下显示 Apache,但我没有安装 Apache 包。

我很茫然。有没有人尝试过使用 Synology DSM 6 连接到 mysql 数据库并活到现在?

【问题讨论】:

  • 警告:您使用的 an obsolete database API 已从最新版本的 PHP 中删除。你应该使用modern replacement
  • 虽然您不应该真正使用 mysql_* 函数,正如其他人所指出的,但您至少应该在失败时暂时打印出 mysql_error() 的值:这将是来自的实际错误消息连接失败,并可能对正在发生的事情有所了解。 (另外,phpMyAdmin 可以工作吗?如果可以,您使用什么用户名、主机和密码进行连接?服务器详细信息应该在 phpMyAdmin 主屏幕右上角的“数据库服务器”框中...)
  • 谢谢,我很抱歉不知道 mysql_* 函数已被弃用。我能够连接到 mysql 数据库,但看起来 php 在端口 3306 上,而 mysql 在 3307 上。因此,我必须使用“localhost:3307”作为 DB_HOST 而不是普通的旧“localhost”。如何强制 mysql 移动到 3306,或 PHP 移动到 3307?

标签: php mysql mariadb synology


【解决方案1】:

我将 DSM6 与 DS716+ 一起使用,以下代码适用于我。导致连接问题的原因太多。如扩展未启用等。请在任何其他步骤之前使用 phpinfo() 进行验证。尝试使用mysqli extension代替mysql,附上示例代码给你:

<?php
$mysqli = new mysqli("localhost", "dbuser", "dbpassword", "dbname");

$query = "SHOW TABLES";
if ($result = $mysqli->query($query)) {
    while ($row = $result->fetch_row()) {
        printf("%s <br />\n", $row[0]);
    }
    $result->close();
}

$mysqli->close();

?>

【讨论】:

    【解决方案2】:

    mysql-server 正在运行? #service mysql status#mysql 在命令行上。您也可以使用#mysql -u USERNAME -p#mysql -u USERNAME -h localhost -p 来检查登录。见mysql man

    【讨论】:

    • 抱歉我的无知,Synology DSM 的命令行在哪里?我试图寻找一个终端应用程序,但找不到。
    • 如果您使用 Windows,您可以使用免费工具 putty。在 Linux 上,与您的 Synology 设备建立 ssh 连接。您可以使用 administrators 组中的任何帐户登录。要获得 root 访问权限,您必须执行 sudo -i
    【解决方案3】:

    你需要添加一个端口。

    我使用PDO,但你可以使用mysql_connect

      try
      {
         $pdo = new PDO("mysql:host=servernameport=3307;dbname=database", "username", "password");
      }
      catch(PDOException $e)
      {
         echo $e->getMessage();
      }
          return $pdo;
    

    要了解您需要哪个端口,请转至maria db 如果我是对的,这个包会在你安装时自动安装phpmyadmin

    【讨论】:

      【解决方案4】:

      我和你有同样的问题。我用以下主机参数解决了它:

      主机:127.0.0.1:3307

      我正在安装一个从 Duplicator Pro 插件导入的 Wordpress 网站,它对我有用。

      【讨论】:

        猜你喜欢
        • 2017-08-24
        • 2012-04-02
        • 2013-03-24
        • 2017-05-03
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        相关资源
        最近更新 更多