mysqli类的对象无法转换为字符串

时间:2017-04-08 12:50:28

标签: php mysqli

我有我的旧网站所以我决定将它从mysql_更改为mysqli,所以我设法完成了40%,现在我遇到了这个问题。帮助我!

我在'implode()'函数

上收到错误
function user_data($user_id,$conn){
$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 = mysqli_query($conn,$query) or die(mysqli_error($conn));
    while ($row = $result->fetch_assoc()) {
    $data = $row['user_id'];
    }

    return $data;
    }
}

为了让代码能够正常运行

if (logged_in() === true){
$session_user_id = $_SESSION['user_id'];
$user_data = user_data($session_user_id,'user_id','username',
            'password','first_name','last_name','email','type',$conn);
}

执行相同任务的任何其他方式

2 个答案:

答案 0 :(得分:0)

$ func_get_args有$ user_id,其他字符串值,最后是mysqli连接对象。您必须取消设置函数参数的最后一个元素。正确的user_data函数是:

function user_data($user_id,$conn){
$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]);
    unset($func_get_args[ $func_num_args - 1]); // you must delete last element becouse this is mysqli object
    $fields = '`'.implode('`,`',$func_get_args).'`';
    $query = "SELECT ".$fields." FROM users WHERE user_id = ".$user_id."";
    $result = mysqli_query($conn,$query) or die(mysqli_error($conn));
    while ($row = $result->fetch_assoc()) {
    $data = $row['user_id'];
    }

    return $data;
    }
}

答案 1 :(得分:0)

您没有正确定义y函数,

在它的签名中,你只有两个参数:

user_data

因此,这些参数为function user_data($user_id, $conn) $user_id

但是当你致电$conn时,你传递更多而不是2个参数:

user_data

请参阅此处的 8 参数。 user_data($session_user_id,'user_id','username', 'password','first_name','last_name','email','type',$conn); 不是第二个,它是第八个!

当你做的时候

$conn
保存你的mysqli连接的最后一个参数被添加到$fields = '`'.implode('`,`',$func_get_args).'`';

所以,你必须重写你的功能,例如这样:

$fields

并将其称为例如:

function user_data($user_id, $conn, $fields) {
    $data = array();
    $user_id = (int)$user_id;

    $fields = '`'.implode('`,`', $fields).'`';
    $query = "SELECT ".$fields." FROM users WHERE user_id = ".$user_id."";
    $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    while ($row = $result->fetch_assoc()) {
        $data = $row['user_id'];
    }

    return $data;
}