Я использую mysqli для подключения к удаленному mysql db. Я не получаю никаких ошибок соединения, однако, когда я печатаю тестовый запрос, моя переменная $ response в консоли отображает только пять строк пробела. Вот мой код подключения:
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$connection = mysqli_init();
mysqli_options ($connection, MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT, true);
mysqli_ssl_set($connection,'/usr/local/certs/client-key.pem',
'/usr/local/certs/client-cert.pem', '/usr/local/certs/server-ca.pem', NULL, NULL);
$link = mysqli_real_connect ($connection, $db['host'],
$db['user'],$db['password'], $db['dbName'], 3306, NULL,MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (!$link)
{
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
}
else
{
$this->output->writeln($link); // this returns '1'
$response = $connection->query('SHOW TABLES;');
$this->output->writeln($response); // here I get blank lines
// even if tables exist within database
$connection->close();
}
Обратите внимание: поскольку этот удаленный сервер mysql использует облако Google, у меня были некоторые проблемы с подключением из-за сертификатов SSL. Поэтому я обнаружил, что мне нужно установить флаг MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT, чтобы избежать проблем. Это может быть важной проблемой.
Во всех случаях выполнение запроса не возвращает результаты этого запроса. Запрос, если он успешный, просто возвращает вам дескриптор, который будет использоваться для перехода, и получить результаты этого запроса.
Поэтому вам нужно добавить какой-то mysqli_fetch для перехода и получить каждую строку набора результатов по одному. См. Измененный код
В этом случае, потому что результат SHOW TABLES немного необычен, я использовал fetch_array(MYSQLI_NUM)
чтобы облегчить обработку результатов, но обычно вы с большей вероятностью fetch_assoc()
использовать fetch_assoc()
или fetch_object()
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$connection = mysqli_init();
mysqli_options ($connection, MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT, true);
mysqli_ssl_set($connection,
'/usr/local/certs/client-key.pem',
'/usr/local/certs/client-cert.pem',
'/usr/local/certs/server-ca.pem',
NULL, NULL);
$link = mysqli_real_connect ($connection, $db['host'],
$db['user'],$db['password'],
$db['dbName'], 3306, NULL,
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (!$link) {
$this->output->writeln('Connect error (' .
mysqli_connect_errno() . '): ' .
mysqli_connect_error() . "\n"
);
} else {
$this->output->writeln($link); // this returns '1'
$response = $connection->query('SHOW TABLES;');
while ( $row = $response->fetch_array(MYSQLI_NUM)) {
$this->output->writeln($row[0]);
}
$connection->close();
}