【问题标题】:Easyphp works, linux server return Call to a member function on a non-objectEasyphp工作,linux服务器返回调用非对象上的成员函数
【发布时间】:2015-06-27 17:33:03
【问题描述】:

我正在使用 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 版本。

【问题讨论】:

    标签: php linux oop server easyphp


    【解决方案1】:

    new mysqli 没有返回对象,好像没有加载 mysqli 扩展

    您可能希望在打开与数据库的连接之前执行此操作

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

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

    【讨论】:

    • 嗨,mcorne - 感谢您的评论。我尝试了你的建议,mysqli 扩展正在工作。我找到了一个解决方案 - 问题在于 SQL 查询 PHP 变量分配。我用解决方案编辑了问题。仍然不知道它是如何在一个平台上工作而在另一个平台上不工作的。
    猜你喜欢
    • 2015-05-20
    • 2013-12-17
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多