Easyphp工作,linux服务器在非对象上返回对成员函数的调用


Easyphp works, linux server return Call to a member function on a non-object

我使用Easyphp进行默认设置的开发。我所有的代码都能很好地与本地Easyphp数据库连接。但当我把它上传到使用linux服务器的网络主机上时,所有带有对象的函数都会突然返回OOP错误。这是我通常写的正常函数的表达式:

function user_data($user_id){
    global $db;
    $data = array();
    $user_id = (int)$user_id;
    $func_num_args = func_num_args();
    $func_get_args = func_get_args();
    if($func_num_args > 1) {
        unset($func_get_args[0]);
        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $query = "SELECT $fields FROM users WHERE user_id = '$user_id'";
        $result = $db->query($query);
        $data = $result->fetch_assoc(); 
        return $data;
        $result->free();
        $data->free();
    }
}

在我的本地php服务器上一切正常。在我用linux服务器将其上传到网络主机上后,我在以下行中得到"对非对象错误的成员函数fetch_assoc()的调用":

 $data = $result->fetch_assoc();

有人能告诉我我写错了什么吗?

easyphp:的数据库连接

 $db = new mysqli("$DB_HOST","$DB_USER","$DB_PASSWORD","$DB_NAME");

linux服务器的数据库连接:

 $socket = "/tmp/mysql51.sock";
 $db = new mysqli("$DB_HOST","$DB_USER","$DB_PASSWORD","$DB_NAME", 0, $socket);

谢谢

编辑-解决方案

我找到了出错的原因。它是在PHP代码中编写SQL查询中的变量。查询应该像:

$query="SELECT$fields FROM users WHERE user_id='"$user_id。"'";

错误的原因对我来说仍然是个谜。它可以是平台或PHP版本。

new mysqli没有返回对象,看起来mysqli扩展没有加载

在打开到数据库的连接之前,您可能需要执行此操作

if (! extension_loaded("mysqli")) { ... }

你可以在这里试试http://micmap.org/php-by-example/en/function/extension_loaded