2017-04-15 82 views
1

这是我的main.php代码只是试图连接到MySQL数据库,并检查它是否可以连接到它。无法连接到谷歌云上使用PHP的MySQL。没有错误popup

<?php 
$USER = "root"; 
$PASS = "";// I do have a password. I just haven't mentioned on StackOverflow 
$IP = "104.199.248.141"; 
$DB = "Contacts"; 

$conn = mysqli_connect($IP,$USER,$PASS,$DB,null,"/cloudsql/adiscontactbook:asia-east1:contacts-book"); 
if($conn != null) { 
    print("Connected! :*"); 
    mysqli_close($conn); 
} else { 
    print("Can't connect! :("); 
} 
?> 

这是app.yaml

runtime: php55 
api_version: 1 
threadsafe: yes 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.php 

CAN通过终端连接到我的MySQL实例通过键入:

mysql --host=104.199.248.141 --user=root --password 

和终端输出Connected! :*

这是我的应用程序URL:https://adiscontactbook.appspot.com/

当我在浏览器中键入URL,它输出Can't connect! :(

PS:我已经给权限我的应用程序,以及在Authorize networks节我的本地计算机上分别输入IP地址35.185.186.77(我的应用程序的外部IP)和14.97.103.225访问MySQL实例。

为什么我没有问题通过终端访问它,但无法通过浏览器通过键入URL连接?

+0

而不是输出'无法连接'看看什么是实际的错误:http://php.net/mysqli_error – Danny

+0

@丹尼我试过。它不输出任何东西。 –

回答

1

当您通过套接字连接时,您应该将null传递给$host参数。

$conn = mysqli(null, $USER, $PASS, $DB,null, "/cloudsql/adiscontactbook:asia-east1:contacts-book") 
+0

嘿!这实际上工作。但我不明白它为什么起作用。 :D请你解释一下吗?我以前没有输入端口号和套接字。只是IP地址,用户名,密码和数据库名称。它仍然无法连接。它为什么现在连接?请详细说明。 –

+1

传递'$ host'参数将导致连接使用TCP/IP而不是套接字。 Google要求您通过套接字进行连接。 – Hedam

0

mysqli_connect的第五个参数是端口号,第六个参数是套接字路径。您可以尝试省略第五个和第六个参数。请参阅文档mysqli_connect(http://php.net/manual/en/function.mysqli-connect.php

+0

我先试过。它没有工作。 –

+0

您的mysql服务器是否可以通过TCP套接字或Unix套接字进行访问? –

+0

它必须是。因为我可以通过终端连接到它。使用“mysql”工具。 –

相关问题