我正在制作一个在我的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;
为什么我收到此错误?
答案 0 :(得分:3)
我遇到了同样的问题:
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
规范没有任何效果,但也没有给出错误消息。
答案 1 :(得分:2)
我有答案,连接被拒绝,因为我在我的汉学上安装了mariaDB,将MySQL的默认端口从3306改为3307。
答案 2 :(得分:0)
只是遇到了同样的问题,这就是我如何解决它。 我正在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/mysqldmysql10.sock进行了更改,我在mariadb10属性中发现了这一点。 它对我来说非常糟糕,所以我希望它也会对其他人有所帮助:)
答案 3 :(得分:0)
它为我解决了什么
转到Synology Apps> MariaDB
确保在端口3306上方启用了“启用TCP / IP连接”。
记下域套接字:/run/mysqld/mysqld10.sock
以及上面的评论。
在网站> PHP设置>编辑>核心选项卡中
搜索>套接字
将域套接字示例/run/mysqld/mysqld10.sock输入到default_sockets
答案 4 :(得分:0)
我有同样的问题。
我最终通过启用与端口3307的TCP / IP连接来解决它。您可以通过在Synology Package Center中打开MariaDB 10选项来实现。
然后代替: mysqli_connect(“ 127.0.0.1”,“ root”,“”,DB_NAME);
我将端口号附加为第五个参数: mysqli_connect(“ 127.0.0.1”,“ root”,“”,DB_NAME,3307);
答案 5 :(得分:0)
我没有找到综合答案,但设法用以前的答案和其他线程解决了我的问题。
作为潜在的备忘录:
这是一个测试片段,
<?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);
}
?>