【问题标题】:Testing php / mysqli connection测试 php / mysqli 连接
【发布时间】:2011-04-10 08:52:03
【问题描述】:

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

if(***connection here ***) {
    echo "connected";
}
else { 
    echo "not connected"; 
}

它与“已连接”相呼应,这很棒。但只是为了检查我更改了连接中的密码,以便我知道它无法连接并且它仍然回显“已连接”。所以,if / else 测试显然不是要走的路......

【问题讨论】:

标签: php ubuntu mysqli


【解决方案1】:

mysqli_connect() 总是返回一个 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.";
}

【讨论】:

  • 这行得通。谢谢你,莱克。当然,这只会加深谜团。我现在知道数据库实际上正在连接,这意味着我的脚本实际上是在查询本身。这更没有意义,因为查询本身在其他服务器上工作。我什至写了一个简单的测试查询,可悲的是,它仍然返回非对象错误。
  • else{ echo "已连接。"; } 添加 ;
【解决方案2】:

在你的终端执行测试 php 连接:

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

【讨论】:

    【解决方案3】:

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

     $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"
    

    【讨论】:

    • 死亡总是不好的。至少发送 503 状态并且 从不 泄露任何敏感信息,例如 mysql 错误消息。改用 trigger_error() 。虽然在这里没什么用,因为 PHP 错误消息已经非常有用了,如果有的话
    • 其实我也试过用类似的东西,只是用mysqli_connect_error()不会报错。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 2011-04-13
    • 1970-01-01
    • 2018-12-30
    • 2018-03-09
    • 2011-04-21
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多