Ответ на запрос mysqli остается пустым, несмотря на соединение с базой данных

0

Я использую 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
google-cloud-datastore

1 ответ

0
Лучший ответ

Во всех случаях выполнение запроса не возвращает результаты этого запроса. Запрос, если он успешный, просто возвращает вам дескриптор, который будет использоваться для перехода, и получить результаты этого запроса.

Поэтому вам нужно добавить какой-то 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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню