2012-11-17 182 views
0

我有一個數組$ ziparray,我試圖在MySQL查詢中使用,以檢查名爲'zip'的數據庫列。下面的代碼似乎是合乎邏輯的我,但我得到了一個錯誤:MySQL中的數組Where where條款

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

$ziparrayimplode = implode(",", $ziparray); 
$listinghistoryquery = "SELECT * FROM listings WHERE zip IN ($ziparrayimplode) ORDER BY list_ts DESC"; 
$listinghistory = mysql_query($listinghistoryquery) or die('SQL Error :: '.mysql_error()); 

我絕對肯定的$ ziparray是一個數組。任何人都可以告訴我如何使這個查詢工作?下面是用於創建數組的代碼..

$countyzipquery = mysql_query("SELECT city_zip FROM dev_cities WHERE city_state='$state' AND city_county='$county' AND city_name='$city'"); 
$ziparray = array(); 
while (($ziparrayrow = mysql_fetch_object($countyzipquery)) !== FALSE) { 
    $ziparray[] = $ziparrayrow; 

下面是後續代碼var_dump($ ziparray)

array(1) { [0]=> object(stdClass)#3 (1) { ["city_zip"]=> string(5) "63028" } } 
+1

看起來你的$ ziparray是一個標準的對象,而不是一個數組。你能拋出你用來生成它的代碼嗎? (如果需要匿名) –

+1

'$ ziparray'可能是一個數組,但它似乎至少包含一個'stdClass'對象,它無法轉換爲'implode'操作本身的字符串。請在你的問題中包含'var_dump($ ziparray)'的輸出。 – lanzz

+1

那麼你去,你正在將對象('mysql_fetch_object')提取到'$ ziparray'中,然後你試圖連接這些對象。 – lanzz

回答

2
while (($ziparrayrow = mysql_fetch_object($countyzipquery)) !== FALSE) { 

你取的輸出對象從您的數據庫,然後將這些完整對象存儲到您的$ziparray陣列中。不能連接stdClass對象,因爲它們不能被轉換成字符串(一個對象需要定義用於一個__toString方法,和stdClass實例沒有這樣的方法)。

您很可能想要讀取數組(mysql_fetch_array而不是mysql_fetch_object),然後在$ziparray中只存儲第一個元素($ziparrayrow[0])。或者,你可以保持mysql_fetch_object,但改變$ziparray你的元素累積:

$ziparray[] = $ziparrayrow->city_zip; 
+0

謝謝!這就是爲什麼我喜歡這個網站。我總是花幾個小時試圖自己想出來,但是當我不能來到這裏並且獲得一個很好的教訓時。這不僅解決了它,我現在明白我做錯了什麼,並且學習了一些關於獲取數組的知識。 – Budove