2011-09-01 42 views
1

下面的代碼將不會工作,因爲這條線$params=array($data);。它需要非$數據的東西。或者在這行之前需要使用$數據發生的事情。從MySQL導入的數組可以工作,但數組不能被php用作數組?

如果該行被寫爲$ PARAMS =陣列( 「A」, 「B」, 「C」, 「d」);那麼它工作的很好,但我的數組是在$ data變量中,而不是像這樣寫出來的。如果有辦法讓數組轉換成這樣寫出來,那也可以。

最終結果應顯示每個可能的組合(未組合)的數組的內容。就像在上面的例子中,它顯示了ABC,BD等。

$data = mysql_query('SELECT weight FROM my_table WHERE session_id = "' . session_id() . '"'); 

$params=array($data); 

$combinations=getCombinations($params); 
function getCombinations($array) 
{ 
    $length=sizeof($array); 
    $combocount=pow(2,$length); 
for ($i=1; $i<$combocount; $i++) 
    { 

$binary = str_pad(decbin($i), $length, "0", STR_PAD_LEFT); 
     $combination=''; 
     for($j=0;$j<$length;$j++) 
     { 
      if($binary[$j]=="1") 
       $combination.=$array[$j]; 
     } 
     $combinationsarray[]=$combination; 
     echo $combination."&lt;br&gt;"; 
    } 
    return $combinationsarray; 
} 

回答

0

mysql_query()只返回一個結果資源ID。檢索數據,您必須使用「提取」命令之一,例如

$params = array(); 
while ($row = mysql_fetch_assoc($data)) { 
    $params[] = $row['weight']; 
} 

而且,您的查詢可能是受到SQL注入攻擊。我不會暗中相信session_id()的價值。我不完全確定這一點,但它可能只是從會話cookie中檢索值。

最起碼,消毒與mysql_real_escape_string()值。將代碼帶出黑暗時代的更強大的解決方案是使用PDO和參數綁定。

+0

感謝它的工作! –

0

好吧,你的腳本有很多基本問題。我個人建議首先read this article然後關於actual function called mysql_fetch_array()

簡單地說,你是從MySQL接收是資源(corrent我,如果我錯了!),你必須對獲取數組。

$params = mysql_fetch_array($data); 

PS:這是沒有意義的:$params=array($data);

0

$data不是數組。假設mysql_query()沒有返回錯誤或空的結果(這兩者都應該檢查,順便說一句 - 查找文檔mysql_error()mysql_num_rows()也許,也許有些人),$data是一種資源。

所以你要$params=mysql_fetch_array($data)使其成爲一個數組。 (假設只有一個結果,如果它可能返回多於一行,你可能想要把它包裝在一個循環中,如果你100%確定session_id是唯一的,那麼你可以不用循環我想,你也可以逃脫不循環,如果你只關心一個多行結果的第一個結果,但我會在LIMIT 1扔在您的查詢在這種情況下,以提高性能。)

有很多選項(你想要一個數字索引數組,或者其中的鍵是列的名稱等),所以在http://www.php.net/manual/en/function.mysql-fetch-array.php處閱讀。

+0

這是我正在嘗試在此頁面上執行的操作。 http://www.sonyjose.in/blog/?p=62我想從mysql獲取數組而不是手動寫出數組。很多時候有超過1行,但有時只有1或0行。 –