解決phpMyAdmin連不上MySQL In App的問題


想要把Laravel PHP的程式部署到Azure上,原本覺得是一件很簡單的事情,因為前一陣子才在Azure上用WordPress建立我自己的部落格,前後也才花不到幾分鐘,一樣是用MySQL In App的方案(因為它便宜)。

台中的阿鴻來訊息說:phpMyAdmin連不上MySQL,我想說你這個肉腳,我來試試,再來教你,哈~哪來的自信阿….想不到竟然花了我約一週的時間,還好有Ming哥說他也被雷到,才找到一點蛛絲馬跡。


Step01.開設完Web App之後,可以在左側選單找到MySQL In App,點進去之後照官方說法,點管理之後,就可以開啟phpMyAdmin。

Step02. 需要輸入帳號密碼喔,但在哪裡? (官方文章沒有寫得很清楚,但很多人卡在這一關),上圖說明的位置,可以點”深入了解“進去了解一下。

Step03.目前根據技術文件是說可以使用程式的方法進獲得連線資訊

$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key => $value) {
    if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) {
        continue;
    }
    
    $connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
    $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
    $connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
    $connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

$link = mysqli_connect($connectstr_dbhost, $connectstr_dbusername, $connectstr_dbpassword,$connectstr_dbname);

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

Step04.於是我就寫一隻index.php程式,丟到網站跟目錄。回應如下:
Success: A proper connection to MySQL was made! The my_db database is great. Host information: 127.0.0.1:52318 via TCP/IP

Step05.執行完index.php之後,在去點管理即可連到phpMyAdmin。(Why…?)

Step05.使用FTP連入Web App

你可以發現有一個檔案 MYSQLCONNSTR_localdb.txt 是本來沒有的,但是執行過index.php,他就被產生出來,內容如下:
Database=localdb;Data Source=127.0.0.1:52318;User Id=azure;Password=6#vWHD_$
內建的phpMyAdmin應該是靠這個檔案,才可以不用帳密連入。

根據官方說法,MySQL In App的連線資訊是會變動的,我實際重開App發現是port號會變動,原本127.0.0.1:52318 變成 127.0.0.1:58806,這也是為什麼php的連線資訊是要去抓MYSQLCONNSTR_localdb.ini的設定了

看來英文能力要加強一下了,官方文件寫的也沒錯,只是自己看不懂,哈~哈~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *