我刚刚切换了webhoster,并尝试在此处部署我的PHP应用程序。不幸的是,在与此错误消息在登录过程中崩溃了:致命错误:调用非对象(mysqli)上的成员函数fetch_assoc()
Fatal error: Call to a member function fetch_assoc() on a non-object in /home/infobo9/www/xxx/login.php on line 41
这是代码:
$DB = new DB;
$mysqli = $DB->getMySQLiObject();
$sql = "SELECT ios_worker.username, ios_worker.prename, ios_worker.lastname, ios_worker.partnerid_fk, ios_worker.workerid, ios_worker.password, role.rolename, role.roledescription, ios_partners.accessToAdminPortal FROM ios_partners join ios_worker on ios_worker.partnerid_fk = ios_partners.partnerid join workerrole on workerrole.workerid_fk = ios_worker.workerid join role on workerrole.roleid_fk = role.roleid WHERE ios_worker.username = ? LIMIT 1";
$stmt = $mysqli->prepare($sql);
$result = $stmt->bind_param('s', $username);
$result = $stmt->execute();
var_dump($mysqli);
if (!$result) {
echo $mysqli->error;
}
var_dump($result);
while ($row = $result->fetch_assoc()) { // <-- fails here
...
}
输出:
Notice: Undefined index: source in /home/infobo9/www/xxx/login.php on line 23
object(mysqli)#2 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(6) "5.5.40" ["client_version"]=> int(50540) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(9) ["host_info"]=> string(33) "xxx via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(10) "5.5.37-log" ["server_version"]=> int(50537) ["stat"]=> string(52) "Commands out of sync; you can't run this command now" ["sqlstate"]=> string(5) "HY000" ["protocol_version"]=> int(10) ["thread_id"]=> int(82066639) ["warning_count"]=> int(0) }
bool(true)
Fatal error: Call to a member function fetch_assoc() on a non-object in /home/infobo9/www/xxx/login.php on line 41
所以$mysqli
设置,并$result
是true
。我究竟做错了什么? 我也复制了查询,它在PHPMyAdmin中没有任何问题。
我知道这个答案被多次询问,但我无法解决这个问题,因为小时,没有答案解决了我的问题。
谢谢。添加后,我得到这个错误'致命的错误:调用未定义的方法mysqli_stmt :: get_result()在'。我检查了mysqli和mysqlnd驱动程序是否都存在,情况就是如此。任何建议? – doonot 2015-02-23 21:50:10
是的,扩展可能未启用。检查你的php.ini文件并确保'extension = php_mysqli_mysqlnd.dll'没有注释。 (重新启动您的网络服务器。)此外,此方法仅适用于PHP 5.3+。如果你不能使用该方法,那么你仍然可以使用'bind_result()'和'fetch()' – Crackertastic 2015-02-23 21:58:45