LatenteDenis
Acabo de iniciar un servicio de aplicaciones de WordPress alojado en Azure y elegí hacer la opción MySQL en la aplicación (vista previa) para la base de datos. Para aquellos que no lo saben, esto me permite ejecutar el servidor MySQL en paralelo con mi aplicación web dentro del mismo entorno.
Sin embargo, tengo un problema con la forma en que elijo hacer consultas MySQL.
Quiero reutilizar el código de un proyecto PHP diferente donde las llamadas de MySQL tienen la forma de declaraciones PDO, así:
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();
No puedo hacer estas llamadas a menos que tenga un nombre de usuario y una contraseña para hacerlo.
El panel lateral de PHPMyAdmin se ve así en la aplicación MySQL (vista previa):
Y si abro las cuentas de usuario, esto es lo que veo:
Estoy perdido cuando se trata de qué usuario y pase debo usar, y si debería usar localdb
como mi db (ahí es donde se enumeran todas las tablas de wordpress).
Considerándolo todo, solo estoy tratando de extraer información de la base de datos usando declaraciones PDO y necesito saber cómo hacerlo.
aarón chen
La cadena de conexión se puede ver en D:\home\data\mysql\MYSQLCONNSTR_localdb.txt
. Puede ubicar este archivo a través de la Consola de depuración de Kudu, a la que se puede acceder a través de https://<yourwebsitename>.scm.azurewebsites.net/DebugConsole
.
El contenido del archivo se parece a:
Database=localdb;Data Source=127.0.0.1:54306;User Id=azure;Password=6#vWHD_$
El siguiente es un fragmento de código de muestra que usa PDO para conectar MySQL en la aplicación.
$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!";
Actualización importante:
Una máquina virtual puede alojar varias aplicaciones web; por lo tanto, múltiples procesos MySQL en la aplicación. Cuando iniciamos el proceso MySql, intentamos usar el mismo puerto que antes. Sin embargo, puede ser tomado por otro servicio u otro MySQL integrado en la aplicación. Como resultado, el puerto puede cambiar. Además, la aplicación web se puede mover de una máquina virtual a otra y el conjunto de puertos disponibles será diferente.
Para escribir la aplicación de cliente estable, asegúrese de leer la información de conexión de la variable env. Ver este para más detalles.
Entonces deberíamos obtener la cadena de conexión de la variable env en PHP como se muestra a continuación:
$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);
}
-
¡Clavo en el punto y algo más! Solución perfecta, gran ejemplo de código. ¡Gracias!
– Latente Denis
12 de enero de 2017 a las 13:48
Abdullah Tahan
vaya a Configuración y luego agregue la conexión
Nombre = Valor predeterminado de conexión = Base de datos = su_base de datos; Fuente de datos = su_sitio web.mysql.database.azure.com; Id. de usuario = su_nombre de usuario; Contraseña = su_contraseña
entonces para mí suresh42326 respondió funcionó
Para mí, visitar .azurewebsites.net resolvió mi problema. después de eso, busqué .scm.azurewebsites.net/phpmyadmin, no me pidió la contraseña.
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);
-
¿Por qué simplemente copiaste y pegaste la respuesta anterior?
– Tu sentido común
26 de diciembre de 2017 a las 12:53
-
lea los comentarios principales, explica cómo puede conectar una base de datos personalizada. Enfrenté este problema y luego lo resolví. así que pensé que sería de gran ayuda para otros.
– Jamshed danés
27 de diciembre de 2017 a las 14:11
Supongo que Azure ofrece un panel de control para enumerar sus servicios. Si es así, debería mostrar el host/IP de la base de datos; de lo contrario, esta información debería estar visible en phpMyAdmin. En cuanto a las credenciales, cree una nueva cuenta en phpMyAdmin.
– mitad
11 de enero de 2017 a las 22:33
¿Ayuda esta respuesta?
– mitad
11 de enero de 2017 a las 22:36