programing

Azure: MySQL in-app(미리보기)를 사용하는 Wordpress 데이터베이스의 기본 사용자/패스 위치는 어디입니까?

bestcode 2023. 2. 10. 21:58
반응형

Azure: MySQL in-app(미리보기)를 사용하는 Wordpress 데이터베이스의 기본 사용자/패스 위치는 어디입니까?

방금 Azure 호스트 WordPress App Service를 시작하고 데이터베이스에 MySQL in-app(미리 보기) 옵션을 선택했습니다.이를 통해 동일한 환경에서 MySQL 서버를 웹 애플리케이션과 나란히 실행할 수 있습니다.

그러나 MySQL 쿼리를 만드는 방법에 문제가 있습니다.

MySQL 호출이 PDO 문의 형태로 되어 있는 다른 PHP 프로젝트의 코드를 다음과 같이 재사용하고 싶습니다.

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();

유저명과 패스워드가 없는 한, 이러한 콜을 발신할 수 없습니다.

MySQL in-app(미리보기)의 PHPMyAdmin 사이드 패널은 다음과 같습니다.

MySQL 인앱 미리보기용 PHPyAdmin 사이드 패널

사용자 계정을 가져오면 다음과 같이 표시됩니다.

PHPMyAdmin 사용자 계정

어떤 사용자 및 패스를 사용해야 할지, 심지어 어떤 사용자 및 패스를 사용해야 할지 망설여집니다.localdb모든 워드프레스 테이블이 나열됩니다.

대체적으로 PDO 문을 사용하여 데이터베이스에서 정보를 가져오려고 할 뿐인데, 어떻게 해야 하는지 알아야 합니다.

연결 문자열은 에 표시됩니다.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 in-app에 연결하는 샘플 코드 조각입니다.

$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에서 사용할 수 있습니다.그 결과 포트가 변경될 수 있습니다.또한 웹 앱을 VM 간에 이동할 수 있으며 사용 가능한 포트 집합이 다릅니다.

안정적인 클라이언트 앱을 작성하려면 env 변수에서 연결 정보를 읽어보십시오.상세한 것에 대하여는, 여기를 참조해 주세요.

따라서 다음과 같이 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);
}

[ Configuration ](설정)

이름 = defaultConnection Value = Database= your_database;데이터 소스=your_website.mysql.database.azure.com;사용자 ID=your_username;비밀번호=your_password

그리고 수레쉬42326은 효과가 있었다.

저는 azurewebsites.net을 방문하면 문제가 해결되었습니다.그 후 scm.azurewebsites.net/phpmyadmin,을 검색하면 패스워드가 묻지 않습니다.

https://github.com/projectkudu/kudu/issues/2238#issuecomment-427358981

/*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);

언급URL : https://stackoverflow.com/questions/41601885/azure-where-is-default-user-pass-for-wordpress-database-using-mysql-in-appprev

반응형