尽管连接到数据库,mysqli 查询响应仍然为空
mysqli query response remain empty despite connection to database
我使用 mysqli 连接远程 mysql 数据库。我没有收到任何连接错误,但是当我键入测试查询时,我在控制台中的 $response 变量仅显示五行空白 space。这是我的连接代码:
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 标志以避免出现问题。这可能是重要的问题。
在所有执行查询的情况下,return 您不会得到该查询的结果。
查询是否成功只是 return 为您提供一个用于获取该查询结果的句柄。
因此您需要添加某种 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();
}
我使用 mysqli 连接远程 mysql 数据库。我没有收到任何连接错误,但是当我键入测试查询时,我在控制台中的 $response 变量仅显示五行空白 space。这是我的连接代码:
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 标志以避免出现问题。这可能是重要的问题。
在所有执行查询的情况下,return 您不会得到该查询的结果。 查询是否成功只是 return 为您提供一个用于获取该查询结果的句柄。
因此您需要添加某种 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();
}