我正在制作一个正在建设中的页面,该页面托管在我的 Synology NAS 上。
访问者可以使用电子邮件订阅并在网站可用时收到通知。
我在将电子邮件添加到数据库的数据库和 PHP 代码方面遇到问题。
如果服务器名称是
localhost
,我会收到以下错误:
SQLSTATE[HY000] [2002] 没有这样的文件或目录
当它是
127.0.0.1
或 127.0.0.1:3306
时,我收到以下错误:
SQLSTATE[HY000] [2002] 连接被拒绝
我在 Stackoverflow 上还没有找到解决方案。
这里是 PHP 代码:
<?php
$servername = "localhost";
$username = "id";
$password = "password";
$dbname = "dbname";
try {
$conn = new PDO( "mysql:host=$servername;dbname=$dbname", $username, $password );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO email ( email ) VALUES ( '$email' )";
$conn->exec( $sql );
echo "New record created successfully";
}
catch( PDOException $e )
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
为什么我会收到此错误?
我也遇到了同样的问题:
SQLSTATE[HY000] [2002] Connection refused
尝试从 php 连接到我的 Synology NAS 上运行的 MariaDB 数据库时。仅提供用户名和密码
$conn = new PDO( "mysql:host=$servername;dbname=$dbname", $username, $password );
不起作用,在指定端口号时,在其他地方找到的解决方案也不起作用:
$conn = new PDO( "mysql:host=$servername;port=3307;dbname=$dbname", $username, $password );
什么对我有用:
$conn = new PDO("mysql:host=$servername:3307;dbname=$database", $login, $password);
从 Synology NAS 的主菜单打开 MariaDB 10 属性窗口时可以找到端口名称。 显然,
port=3307
规范没有任何效果,但也没有给出错误消息。
我有答案了,连接被拒绝是因为我在汉学上安装了mariaDB,将MySQL的默认端口从3306更改为3307。
我也有同样的问题。
我最终通过启用端口 3307 的 TCP/IP 连接来解决这个问题。您可以通过在 Synology 套件中心打开 MariaDB 10 选项来完成此操作。
然后改为: mysqli_connect("127.0.0.1", "root", "", DB_NAME);
我在其中附加了端口号作为第五个参数: mysqli_connect("127.0.0.1", "root", "", DB_NAME, 3307);
什么为我解决了这个问题。
进入 Synology Apps > MariaDB
确保在端口 3306 上方启用“启用 TCP/IP 连接”。
记下域套接字:/run/mysqld/mysqld10.sock
正如上面的评论。
在 Web Station > PHP 设置 > 编辑 > 核心选项卡中
搜索 > 插座
在default_sockets中输入域套接字示例/run/mysqld/mysqld10.sock
刚刚遇到了同样的问题,这就是我解决它的方法。 我在 DSM 6.2.2-24922 Synology diskstation 上运行,我使用 Nginx、PHP 5.6 以及 MariaDB 10(和 phpmyadmin)安装了 webstation。
我发现的修复方法是首先在 php 配置中激活 pdo_mysql 扩展。
然后进入 Core 选项卡并查找 pdo_mysql.default_socket。
默认情况下,我有
/tmp/mysql.sock,但我用
/run/mysqld/mysql10.sock更改了它,我在mariadb10属性中找到了它。 它对我来说非常有效,所以我希望它也能对其他人有所帮助:)
我没有找到综合答案,但设法用以前的答案和其他线程解决了我的问题。
作为潜在的备忘录:
这是一个测试片段,
<?PHP
$dsn = "mysql:host=127.0.0.1:3307;dbname=XXX";
$username = "XXX";
$password = "XXXXX";
try {
$pdo = new PDO($dsn, $username, $password);
} catch(PDOException $e) {
die($e);
}
$stmt = $pdo->prepare("SELECT * FROM user WHERE XXX = 'XXX'");
$stmt->execute();
while($row = $stmt->fetch()) {
print_r($row);
}
?>
进入目录:
cd /var/packages/MariaDB10/etc
重命名您的 my.cnf 文件
mv my.cnf my_backup.cnf
启动数据库服务器
/usr/syno/bin/synopkg start MariaDB10
恢复 my.cnf 文件以前的名称
mv my_backup.cnf my.cnf
重新启动数据库服务器
/usr/syno/bin/synopkg restart MariaDB10
检查数据库是否正在运行