2017-04-08 120 views
0

我有我的旧网站,所以我决定将其从mysql_更改为mysqli,所以我设法完成了40%,现在我坚持这个问题。帮帮我!class mysqli的对象无法转换为字符串

我就收到错误“破灭()”函数

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; 
    } 
} 

为了让下面的代码才能正常工作

任何替代方法来执行相同的任务将

+0

你会得到什么错误? –

+0

可捕捉的致命错误:类mysqli的对象无法转换为字符串 – aitkotw

+0

请参阅错误o它抛出哪一行并将该行指向此处...不是函数名称, –

回答

0

你有user_data功能的不正确的定义,

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

function user_data($user_id, $conn) 

因此,这些论点$user_id$conn

但是,当你打电话给你user_data传递超过2个参数:

user_data($session_user_id,'user_id','username', 'password','first_name','last_name','email','type',$conn); 

看到的,你在这里参数。而且$conn不是第二个,它是第八个!

当你这样做

持有你的mysqli连接被添加到 $fields
$fields = '`'.implode('`,`',$func_get_args).'`'; 

最后一个参数。

所以,你不得不重写你的函数,比如这样:

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; 
} 

,并调用它,例如:

$user_data = user_data(
    $session_user_id, // $user_id 
    $conn,    // $conn 
    array('user_id','username','password','first_name','last_name','email','type') // fields as ARRAY 
); 
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; 
    } 
} 
+0

感谢兄弟,您让我的一天 – aitkotw

+0

兄弟没问题。你也可以接受我的回答:) – kodmanyagha