2013-02-27 98 views
0

越來越:開捕致命錯誤:類stdClass的客體不能轉換成字符串......從下面的代碼:獲取PHP變量到數據庫

$url = "{$row['url']}"; 

$embed_info = json_decode($client->get('oembed', array('url' => $url))); 
$sql="INSERT INTO persons (iframe) VALUES('$embed_info')"; 

如何獲得$ embed_info作爲字符串工作並很好地進入我的數據庫?

+5

好吧,做一個'var_dump($ embed_info)'看看你想要插入什麼。它顯然不是一個普通的字符串。鑑於它是stdclass,無論你得到的是解碼到一個對象,而不是一個字符串。 – 2013-02-27 21:36:43

+2

您是否試圖存儲JSON?如果是這樣,不要先執行json_decode,它將返回一個對象。 – Madbreaks 2013-02-27 21:37:00

回答

0

看着這樣的:

$embed_info = json_decode($client->get('oembed', array('url' => $url))); 

假設$client->get調用返回JSON(字符串),這可能是你想存儲的東西。一旦你在該JSON上調用json_decode$embed_info就是一個對象(解碼的JSON)。因爲PHP會嘗試隱式地嘗試將對象轉換爲字符串,您不能再執行類似$sql = "...$embed_info...";的操作。

如果您只想存儲JSON,請跳過json_decode調用。

+0

所以只是$ embed_info = $ client-> get('oembed',array('url'=> $ url));將成爲一個解決方案? – user1325578 2013-02-27 21:48:15

+0

我不知道,因爲我不知道*你想要存儲什麼*。如果你想將JSON響應存儲爲一個字符串,那麼是的。 – Madbreaks 2013-02-27 21:59:47

0

不知道是一個很好的做法,或者如果它符合你的需要,但你可以序列化對象,並使用Base64編碼,它(爲逗號,和其他字符)

$embed_info = json_decode($client->get('oembed', array('url' => $url))); 
$data = base64_encode(serialize($embed_info)); 
$sql = "INSERT INTO persons (iframe) VALUES ('{$data}')"; 

以後可以檢索對象:

$sql = "SELECT iframe FROM persons WHERE <the where>"; 
// ... execute the query and fetch in $row 
$embed_info = unserialize(base64_decode($row['iframe'])); 
// Now in $embed_info you get back the object 
// Note that the object's class must be loaded before do that 
+0

Op已經在String形式的對象(它是JSON)。爲什麼要對它進行解碼,然後對其進行序列化,然後對其進行編碼,以便將其存儲爲字符串......只有在將其從數據庫中拉出時才需要做相反的操作。 – Madbreaks 2013-02-27 22:01:36

+0

好吧我的數據庫中存儲的代碼現在瘋了,我真的只想存儲可用的iframe嵌入代碼。有任何想法嗎? – user1325578 2013-02-27 22:18:05

+0

@Madbreaks也許我誤解了這個問題,但是如果他問如何將一個對象插入到數據庫(而不是直接對象)中,您可以這樣做。但正如我在帖子中所說,不要認爲這是一種好的做法。 – 2013-03-09 19:51:15