测试php/mysqli连接

测试php/mysqli连接,php,ubuntu,mysqli,Php,Ubuntu,Mysqli,我正在寻找一种方法来测试php/mysqli连接的连接部分。我正在从Vista上的LAMP服务器迁移到Ubuntu上的LAMP服务器,并且我正在努力让mysqli正常工作。我知道所有正确的模块都已安装,PhpMyAdmin工作正常。我已经在上迁移了一个站点,但mysqli连接都不起作用。我得到的错误是“调用非对象上的成员函数xxx()”,通常在查询本身错误或查询是从错误连接准备的情况下弹出。我知道查询本身是好的,因为它在另一台数据库结构和数据完全相同的服务器上运行良好。这让我有了联系。我试图编写

我正在寻找一种方法来测试php/mysqli连接的连接部分。我正在从Vista上的LAMP服务器迁移到Ubuntu上的LAMP服务器,并且我正在努力让mysqli正常工作。我知道所有正确的模块都已安装,PhpMyAdmin工作正常。我已经在上迁移了一个站点,但mysqli连接都不起作用。我得到的错误是“调用非对象上的成员函数xxx()”,通常在查询本身错误或查询是从错误连接准备的情况下弹出。我知道查询本身是好的,因为它在另一台数据库结构和数据完全相同的服务器上运行良好。这让我有了联系。我试图编写一个非常简单的测试连接,并将其放入一个循环中,如

if(***connection here ***) {
    echo "connected";
}
else { 
    echo "not connected"; 
}
它呼应“连接”,这是伟大的。但只是为了检查,我在连接中更改了密码,这样我知道它将无法连接,并且它仍然回显“已连接”。因此,if/else测试显然不是一个好办法……

总是返回一个MySQLi对象。要检查连接错误,请使用:

$mysqli_connection = new MySQLi('localhost', 'user', 'pass', 'db');
if ($mysqli_connection->connect_error) {
   echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else {
   echo "Connected.";
}

然后,您需要对各种数据库调用进行更多的错误处理。快速/肮脏的方法就是简单地做

 $whatever = mysqli_somefunction(...) or die("MySQL error: ". mysqli_error());
如果发生错误,所有函数都返回布尔值FALSE,或者返回相应的mysqli对象和结果。如果没有错误检查,您将执行以下操作:

 $result = $mysqli->query("blah blah will cause a syntax error");
 $data = $result->fetchRow();  // $result is "FALSE", not a mysqli_object, hence the "call to member on non-object"

对于终端中的测试php连接,请执行:

$ php -r 'var_dump(mysqli_connect("localhost:/tmp/mysql.sock", "MYSQL_USER", "MYSQL_PASS",
     "DBNAME));'

你能在这里展示一下你是如何连接的吗(你可以省略用户和密码)?“在非对象上调用成员函数xxx()”错误与数据库连接无关。请阅读:死亡总是不好的。至少发送503状态,不要泄露任何敏感信息,如mysql错误消息。请改用trigger_error()。虽然它在这里很无用,因为PHP错误消息已经很有用了,但如果我真的尝试过使用类似的东西,只在mysqli_connect_error()上,它不会抛出错误。这很有效。谢谢你,列克。当然,这只会加深谜团。我现在知道数据库实际上正在连接,这意味着我的脚本实际上在查询本身上撒了一点东西。由于查询本身可以在其他服务器上工作,因此这就没有什么意义了。我甚至编写了一个简单的测试查询,遗憾的是,它仍然返回非对象错误;