2016-06-10 17 views
0

Im folgende Beispiel drucken, ich versuche file_already_exists in einer anderen Zeichenfolge, eine Abfrage zu drucken, aber ich bekomme diese Fehlermeldung:Kann nicht stdClass Eigenschaft

Catchable fatal error: Object of class stdClass could not be converted to string in ... 

$db_items = (object) [ 
    "cover" => (object) [ 
     "file_already_exists" => 0, // can't print 
    ], 
    "file_already_exists" => 0, // can print 
]; 

$str = "INSERT INTO albums (file_on_system) VALUES ('$db_items->cover->file_already_exists')"; 

echo $str; 

Mit $db_items->file_already_exists funktioniert gut, aber nicht $db_items->cover->file_already_exists. Warum das? Gibt es eine Möglichkeit, die in cover zu drucken?


In einer einfacheren Art und Weise

echo "$db_items->file_already_exists"; // works 
echo "$db_items->cover->file_already_exists"; // doesn't work 
+0

Versuchen Sie '$ db_item [0] -> file_already_exists'? Nicht sicher, ob es mit Objekten funktionieren würde, da es verwendet wird, um das erste Element in einem Array zu erhalten ... Update: Liefert 'var_dump ($ db_item-> cover)' etwas zurück? –

+0

Nein. Es erlaubt mir nicht, $ db_items als Array zu behandeln. 'Var_dump()' 'Retuns Objekt (stdClass) # 3 (1) { [ "file_already_exists"] => int (0) }' – akinuri

+3

Sie bekommen zu komplex in den doppelten Anführungszeichen. PHP erlaubt ein '->', aber nicht mehr als eins, wenn Sie das Ganze nicht in '{}' '{$ db_items-> cover-> file_already_exists} '' einschließen. Überprüfen Sie Beispiele im Handbuch für doppelt zitierte Strings. http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double. Ich würde immer empfehlen, mehr als nur einfache Variablen in '{}' einzuschließen. –

Antwort

0
$str = "INSERT INTO [...] VALUES ('$db_items->cover->file_already_exists')"; 

Der Parser nicht weiß, wo der Variablenname endet, so dass es $db_items in den String einzufügen versucht - und das bewirkt, dass die Umwandlung Problem.

Entweder Zeichenfolge Verwendung Verkettung

$str = "INSERT INTO albums [...] VALUES ('".$db_items->cover->file_already_exists."')"; 

oder die complex (curly) syntax,

$str = "INSERT INTO albums [...] VALUES ('{$db_items->cover->file_already_exists}')"; 

Je nachdem, wo dass Wert stammt, nicht vernachlässigen SQL-Injection!

+0

Haha. Ich habe gerade darüber nachgedacht, wie ich mit der SQL-Injektion umgehen werde. Ich bin ziemlich neu in SQL. Es wird etwas Nachforschung brauchen. – akinuri

Verwandte Themen