2017-04-08 6 views
0

Ich hatte meine alte Website, also habe ich beschlossen, es von mysql_ zu mysqli zu ändern, also habe ich 40% abgeschlossen und jetzt bin ich mit diesem Problem fest.Help Me !Objekt der Klasse mysqli konnte nicht in Zeichenkette umgewandelt werden

Ich erhalte Fehler auf 'implodieren()' Funktion

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

Um Code unten zu bekommen richtig

Jeden alternativen Weg zur Arbeit gleiche Aufgabe erfüllen wird

+0

welchen Fehler Sie bekommen ?? –

+0

Abfangbarer fataler Fehler: Das Objekt der Klasse mysqli konnte nicht in die Zeichenfolge – aitkotw

+0

konvertiert werden. Bitte beachten Sie den Fehler der Zeile, in die es geworfen wird, und verweisen Sie auf diese Zeile ... Nicht der Funktionsname, –

Antwort

0

Sie haben nicht korrekte Definition von user_data Funktion,

Darin Unterschrift nur zwei Argumente haben:

function user_data($user_id, $conn) 

Also, diese Argumente sind $user_id und $conn.

Aber wenn Sie rufen Ihre user_data Sie passieren mehr als 2 Argumente:

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

See, Sie haben Argumente hier. Und $conn ist nicht der zweite, es ist der achte!

Und wenn Sie das tun

$fields = '`'.implode('`,`',$func_get_args).'`'; 

letzte Argument, das Ihre mysqli-Verbindung hält an $fields hinzugefügt wird.

So haben Sie Ihre Funktion neu zu schreiben, zum Beispiel so:

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

Und es beispielsweise nennen:

$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 hat $ user_id, andere String-Werte und zuletzt das mysqli-Verbindungsobjekt. Sie müssen das letzte Element der Funktionsparameter deaktivieren. Richtig user_data Funktion ist, dass:

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

Dank bro, Sie haben meinen Tag – aitkotw

+0

Kein Problem bro. Du kannst meine Antwort auch annehmen :) – kodmanyagha

Verwandte Themen