2012-12-17 35 views
0

我有一個函數,允許我根據用戶選擇的SQL服務器類型執行sql查詢。該函數可以很好地獲取單行數據,但它永遠不會返回超過1行。從一個函數內部獲取動態數組

這是SQL函數:

function sqlQuery($query){ 
switch (DATABASE_TYPE) { 
    case 'MYSQL': 
     // Establishes a connection to the database. 
     $connection = mysql_connect(DATABASE_LOCATION, DATABASE_USERNAME, DATABASE_PASSWORD); 
     if(!$connection){ 
      throw new Exception(mysql_error(), 1); 
     } 
     mysql_select_db(DATABASE_NAME); 

     // Performs the query. 
     global $response; 
     $response = mysql_query($query); 
     if(!$response){ 
      throw new Exception(mysql_error(), 1); 
     } 
     return mysql_fetch_array($response); 
     break; 
    } 
} 

而且像我上面說的,這只是正常的單行查詢,但我不能得到任何更多。

如果我試試這個:

$sql = "SELECT * FROM test" 
$rows = sqlQuery($sql); 
foreach($rows as $value){ 
    echo($value); 
} 

如果測試的第1行是1 | Hello | PHP它將呼應11HelloHelloPHPPHP

回答

0

它是簡單的做

$sql = "SELECT * FROM test"; 
$data = array(); 

while($rows = mysql_fetch_assoc($sql)) 
{ 
    $data[] = $rows ; 
} 

return $data; 
+0

我不能使用任何數據庫類型特定的方法,如mysql_fetch,因爲此應用程序需要與其他sql服務器類型一起使用。 –

+0

這只是在mysql中做的一個例子,當然你會這樣做的情況下'MYSQL'的其他SQL服務器類型,你會玩CASE裏面 –

0

爲了進一步瞭解多一點光在raheel的回答中,mysql_fetch_array只返回一行結果。使用while循環可以讓您繼續抓取額外的行,只要它們存在即可。有關其他信息,你可能想看看Getting dynamic array from inside a function

0

如果你有更多的行數你必須使用forloop來獲得所有的行..這就是將返回作爲resourceid# - 請print_r或echo你的結果並檢查它..這裏面使用和mysql_fetch_row導致後〜mysql_fetch_array〜antything其他你想..它與它的id作爲密鑰存儲在陣列...請檢查下面編輯代碼,

function sqlQuery($query){ 
switch (DATABASE_TYPE) { 
    case 'MYSQL': 
     // Establishes a connection to the database. 
     $connection = mysql_connect(DATABASE_LOCATION, DATABASE_USERNAME, DATABASE_PASSWORD); 
     if(!$connection){ 
      throw new Exception(mysql_error(), 1); 
     } 
     mysql_select_db(DATABASE_NAME); 

     // Performs the query. 
     global $response; 
     $response = mysql_query($query); 
     if(!$response){ 
      throw new Exception(mysql_error(), 1); 
     } 
     while($rows = mysql_fetch_array($sql)) 
     { 
      $data[$rows['id]] = $rows; 
     } 
     return $data; 
     break; 
    } 
} 
0

我能夠通過更改從哪些類型的數據返回來解決問題:

return mysql_fetch_array($response);

到:

$rows = array(); 
while($row = mysql_fetch_array($response)){ 
    array_push($rows, $row); 
} 
return $rows; 

感謝您的幫助!