Azure:使用MySQL in-app(预览版)的Wordpress数据库的默认用户/通行证在哪里?

问题描述 投票:7回答:2

我刚刚启动了Azure托管的WordPress应用服务,并选择为数据库执行MySQL应用内(预览)选项。对于那些不知道的人,这允许我在同一环境中与我的Web应用程序并行运行MySQL服务器。

但是,我遇到了选择进行MySQL查询的问题。

我想重用来自不同PHP项目的代码,其中MySQL调用是PDO语句的形式,如下所示:

try {
    $db = new PDO('mysql:host=localhost;dbname=localdb;charset=utf8',
                    'user',
                    'pass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
    echo "did not connect...";
}

$sth = $db->prepare("SELECT *FROM MyTable;");
$sth->execute();

除非我有用户名和密码,否则我无法拨打这些电话。

PHP应用程序(预览版)中的PHPMyAdmin侧面板如下所示:

PHPMyAdmin side-panel for MySQL in-app preview

如果我拉出用户帐户,这就是我所看到的:

PHPMyAdmin User Accounts

当涉及到我应该使用的用户和传递时,我迷失了,如果我甚至应该使用localdb作为我的数据库(这是列出所有wordpress表的地方)。

总而言之,我只是尝试使用PDO语句从数据库中提取信息,并且需要知道如何去做。

php mysql wordpress azure pdo
2个回答
16
投票

连接字符串可以在D:\home\data\mysql\MYSQLCONNSTR_localdb.txt中看到。您可以通过Kudu调试控制台找到此文件,可以通过https://<yourwebsitename>.scm.azurewebsites.net/DebugConsole访问。

文件内容类似于:

Database=localdb;Data Source=127.0.0.1:54306;User Id=azure;Password=6#vWHD_$

以下是使用PDO在应用程序内连接MySQL的示例代码段。

$dsn = 'mysql:dbname=localdb;host=127.0.0.1:54306;charset=utf8';
$user = 'azure';
$password = '6#vWHD_$';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    exit;
}

echo "Success: A proper connection to MySQL was made!";

重要更新:

来自https://social.msdn.microsoft.com/Forums/azure/en-US/4c582216-bc1b-48b0-b80b-87ae540c3d05/php-azure-mysql-inapp-changed-ports-randomly

VM可以托管多个WebApp;因此,多个应用内MySQL进程。当我们启动MySql进程时,我们尝试使用与以前相同的端口。但是,它可能由其他服务或其他应用内MySQL使用。结果,端口可能会改变。此外,Web应用程序可以从一个VM移动到另一个VM,并且可用端口集将是不同的。

要编写稳定的客户端应用程序,请确保从env变量中读取连接信息。有关详细信息,请参阅this

所以我们应该从PHP中获取env变量的连接字符串,如下所示:

$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);
}

-1
投票
/*Add at the begining of the file
if you want to connect to custom database then fill this variable  $connectstr_dbname = 'MY_CUSTOM_DB'; and comment or remove  $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value); from below code...
*/

$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);
}

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $connectstr_dbname);

/** MySQL database username */
define('DB_USER', $connectstr_dbusername);

/** MySQL database password */
define('DB_PASSWORD', $connectstr_dbpassword);

/** MySQL hostname : this contains the port number in this format host:port . Port is not 3306 when using this feature*/
define('DB_HOST', $connectstr_dbhost);
© www.soinside.com 2019 - 2024. All rights reserved.