Я использую веб-приложение и базу данных Azure MySQL.Я попытался использовать простое соединение:
$host = 'xxxxx.mysql.database.azure.com';
$username = 'xxxxxxxx';
$password = 'xxxxxxxx';
$db_name = 'xxxxxxxx';
//Establishes the connection
$conn = mysqli_init();
mysqli_ssl_set($conn, NULL, NULL, "/cert/BaltimoreCyberTrustRoot.crt.pem",
NULL, NULL);
mysqli_real_connect($conn, $host, $username, $password, $db_name, 3306,
MYSQLI_CLIENT_SSL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
//Run the Select query
printf("Reading data from table: \n");
$res = mysqli_query($conn, 'SELECT * FROM tbl_xxxx');
while ($row = mysqli_fetch_assoc($res)) {
echo $row["ID"]. " : " . $row["XXXX"]."<br>";
}
//Close the connection
mysqli_close($conn);
Но когда я использую строку соединения в моем классе базы данных, я получаю эту ошибку: An attempt was made to access a socket in a way forbidden by its access permissions.
в клиентском браузере.Мой класс базы данных:
public function open_connection() {
$this->conn = mysqli_init();
mysqli_ssl_set($this->conn, NULL, NULL, "/cert/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL);
mysqli_real_connect($this->conn, server, user, pass, database_name, 3306, MYSQLI_CLIENT_SSL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if(mysqli_connect_errno($this->conn)){
echo "Problem in database connection:". mysqli_connect_error();
exit();
}else{
$db_select = mysqli_select_db($this->conn, database_name);
if (!$db_select) {
echo "Problem in selecting database:". mysqli_connect_error();
exit();
}
}
}
Обратите внимание, что server, user, pass, database_name
уже определено с тем же значением в приведенном выше коде.Кстати, мой тест показывает эхо для Problem in selecting database:
, поэтому соединение в порядке.Что я могу сделать, чтобы правильно выбрать базу данных с помощью этого класса?Спасибо.