无法使用mysqli_connect连接,但mysql_connect有效..?

时间:2014-09-25 15:57:40

标签: php mysql

我获得了直接从我的托管服务提供商(1and1)连接到MySQL的凭据。但是,当我尝试连接以下代码时:     

$db_hostname = 'localhost/tmp/mysql5.sock';
$db_database = 'db543062602';
$db_username = '***********';
$db_password = '***********';

$dbc = mysqli_connect($db_hostname, $db_username, $db_password, $db_database)
    or die('Error connecting to MySQL server');
?>

ERROR:

  

警告:mysqli_connect():( HY000 / 2005):未知的MySQL服务器主机   '本地主机/ TMP / mysql5.sock' (1)在/ homepages / ... ... ... /purge.php   第10行连接MySQL服务器时出错

凭据都是一样的。实际上,它在使用mysql_connect()进行连接时有效,但它并不想使用mysql_connect()!有什么可能导致问题的想法?

4 个答案:

答案 0 :(得分:10)

要么错误解释了1& 1中的说明,要么他们犯了错误。

阅读mysqli_connect()的手册页。它显示第一个参数应该是主机名,可以是名称或IP。不要在该参数中包含套接字。

您可以选择将套接字文件指定为第六个参数。

/* WRONG */
mysqli_connect('localhost/tmp/mysql5.sock', ... );

/* WRONG */
mysqli_connect('localhost:/tmp/mysql5.sock', ... );

/* RIGHT */
mysqli_connect('localhost', $db_username, $db_password, $db_database, null, '/tmp/mysql5.sock'); 

另外,我想知道为什么他们甚至要求你指定套接字。他们应该在主机的php.ini文件中定义一个默认值,所以你不必这样做。除非他们在同一台主机上运行多个mysqld实例。

答案 1 :(得分:2)

快速浏览mysqli_connect()'s manual page

  

mysqli mysqli_connect([string $ host = ini_get(" mysqli.default_host")[,string $ username = ini_get(" mysqli.default_user") [,string $ passwd = ini_get(" mysqli.default_pw")[,string $ dbname ="" [,int $ port = ini_get(" mysqli.default_port&#34 ;)[,字符串 $ socket = ini_get(" mysqli.default_socket")]]]]]])

......和:

  

<强>宿主

     

可以是主机名 IP地址。传递NULL值或   字符串&#34; localhost&#34;对于此参数,假定为本地主机。   如果可能,将使用管道而不是TCP / IP协议。

     

<强>插座

     

指定应使用的套接字或命名管道。

我承认手册页可以使用示例,但您没有尝试过的语法痕迹。


请记住 mysqli 与旧版 mysql 不同的扩展程序

  

资源mysql_connect([string $ server = ini_get(&#34; mysql.default_host&#34;)[,string $ username = ini_get(&#34; mysql.default_user&#34;) [,string $ password = ini_get(&#34; mysql.default_password&#34;)[,bool $ new_link = false [,int $ client_flags = 0]]]]])

......其中:

  

服务器

     

MySQL服务器。它还可以包含端口号。例如&#34;主机名:端口&#34;或者本地套接字的路径,例如&#34;:/路径/到/插座&#34;对于localhost。

答案 2 :(得分:0)

我认为你的主机名应该是:

localhost:/tmp/mysql5.sock

而不是:

localhost/tmp/mysql5.sock

Reference

或者似乎还有alternative method找到您的主机,因此您应该尝试从面板中获取数据。

答案 3 :(得分:0)

请加上 mysql.default_socket = /tmp/mysql5.sock; 在服务器根目录的php.ini中的这一行。