2017-04-08 114 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