【问题标题】:MySQL PHP adding 3306 without my inputMySQL PHP在没有我输入的情况下添加3306
【发布时间】:2017-10-21 14:40:12
【问题描述】:

我有一个后端 cron 脚本,它会定期检查 MySQl 的 if-then 条件,然后运行 ​​Curl 操作。无论如何,脚本已经运行了一年多,突然出现问题,对我来说没有意义

这是脚本的截断代码

<?php
    //assign values to variables
    $servername = "localhost:3306";

    $username = "username";

    $password = "password";

    $database = "database";

    $con = mysqli_connect($servername, $username, $password, $database);

    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $results = "SELECT NewUserID FROM queue ORDER BY ID";

    $queryresults = $con->query($results);

    if($con->error) {
        printf("Errormessage: %s\n", $con->error);
        die();
    }

我会看到这个错误:

Warning: mysqli_connect(): (HY000/2002): Failed to parse address "localhost:3306:3306" in /home/foo/bar/BackEnd.php on line 11
Failed to connect to MySQL: Failed to parse address "localhost:3306:3306"
Fatal error: Uncaught Error: Call to a member function query() on boolean in /home/foo/bar/BackEnd.php:19
Stack trace:
#0 {main}
thrown in /home/foo/bar/BackEnd.php on line 19

解决方案很简单,我将“localhost:3306”更改为“localhost”,一切正常,因为似乎“:3306”被添加到已经存在的内容中。这个解决方案似乎是一个等待发生的问题,但我不确定首先出了什么问题。有什么想法吗?

【问题讨论】:

    标签: php mysql linux cron


    【解决方案1】:

    您不能在host 参数中指定端口。 这是完整的函数定义:

    mysqli_connect($host, $username, $password, $dbname, $port, $socket);
    

    您应该在通话结束时添加端口。像这样:

    $con = mysqli_connect($servername, $username, $password, $database, 3306);
    

    【讨论】:

    • 知道为什么它这么长时间没有导致错误吗?我想计算机就是那样有趣,但现在问题浮出水面似乎很奇怪。默认也是3306,对吗?如果参数留空。
    • 是的 3306 是默认的 MySQL 端口。您可以省略它并使用localhost 不带任何端口。不知道为什么以前可以用,可能你最近更新了PHP版本?
    • 你说得对,我的网络主机终于更新到 php 7,我猜这是一个副作用。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    相关资源
    最近更新 更多