【问题标题】:mysqli query response remain empty despite connection to database尽管连接到数据库,mysqli 查询响应仍然为空
【发布时间】:2017-12-21 13:59:30
【问题描述】:

我使用 mysqli 连接远程 mysql 数据库。我没有收到任何连接错误,但是当我在控制台中键入测试查询时,我的 $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 cloud,我在连接时遇到了一些问题,因为 SSL 证书。所以我发现我需要放置 MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT 标志以避免出现问题。这可能是一个重要的问题。

【问题讨论】:

  • 在运行$response = $connection->query('SHOW TABLES;'); 之后,您仍然需要运行某种fetch 才能真正返回查询结果
  • 如何获取该查询并在控制台中显示?我是 PHP 的一个小新手,但我认为这是一种正确的方法

标签: php mysql mysqli google-cloud-datastore


【解决方案1】:

在执行查询的所有情况下,都不会返回该查询的结果。 如果查询成功,则只会返回一个句柄,用于获取该查询的结果。

因此,您需要添加某种 mysqli_fetch 来一次获取结果集的每一行。查看修改后的代码

在这种情况下,由于 SHOW TABLES 的结果有点不寻常,我使用了fetch_array(MYSQLI_NUM) 来更轻松地处理结果,但通常您更有可能使用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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多