2015-03-03 79 views
0

我一直在撓撓我的頭這幾天,我想我錯過了明顯的,所以我希望有人可以提出一些建議。重複mysql查詢不同的參數php

我有一個sql語句,從數據庫中選擇最後8條記錄,然後將它填入一個數組中並將其反向,這是出於設計原因。我使用下面的語句來做到這一點。

mysql_select_db($database_OASDB, $OASDB); 
$sql = "SELECT *, ROUND(InvoiceNo, 0) AS SnPf, RIGHT(InvoiceNo, 3) AS SnSf FROM table WHERE Unit = 'Param1' AND CustomerName = 'Param2' AND Component = 'Param3' AND Site = 'Param4' ORDER BY SnPf DESC, SnSf ASC LIMIT 8"; 
$result = mysql_query($sql) or die(mysql_error()); 

$array = array(); 

while($row = mysql_fetch_assoc($result)) { 
$array[] = $row; 
} 

$a = array_reverse($array); 

這精美的作品,並顯示在使用各種

現在我需要以某種方式遍歷該語句5次不同的參數表。

我真的希望這是有道理的。

,將不勝感激任何想法..

感謝

安德魯

+0

你想說的是,你不能在php中循環一堆語句。 這很容易我的朋友。只需 創建一個循環,並將您現有的代碼粘貼到循環中。並排除這一個 mysql_select_db($ database_OASDB,$ OASDB); – 2015-03-03 13:17:34

+0

參數如何不同? – RST 2015-03-03 13:19:51

+1

只是一個提示:使用mysqli函數,mysql函數暫時被取消,並且在即將發佈的PHP版本中將被禁用。你也可以使用pdo,但與mysql函數相比,這是一個不同的故事。 – mondjunge 2015-03-03 13:36:48

回答

0

創建您要使用的參數數組,並通過使用的元素在語句中使用foreach循環你創建的數組作爲參數。

1

你可以用PDO或庫MySQLi做到這一點,您的當前版本的MySQL是棄用並強烈建議不要使用它,而不是考慮的MySQLi和PDO其中有方法的地方正是你想做的事,

什麼

我會運行一個非常簡單的例子,但我認爲你需要對MySQL和庫MySQLi之間的差異讀了(有與善意的提醒許多網站,請谷歌)

你的MySQLi將是最好的面向對象的形式,並且您將擁有一個包含連接數據的MySQLi對象:

mysqli的對象(這裏稱爲DBX())現在

Dbx() { 
private $dbiUser = username; 
private $dbiPass = password; 
private $dbiName = database name; 

public function __construct(){ 
     $this->dbiLink = new mysqli("localhost", $this->dbiUser, $this->dbiPass, $this->dbiName); 

     if (mysqli_connect_errno()) { 
      exit('Connect failed: '. mysqli_connect_error()); 
     } 

     if (! $this->dbiLink) 
     { 
      die("Connection Error (" . mysqli_connect_errno() . ") " 
       . mysqli_connect_error()); 
      mysqli_close($this->dbiLink); 
     } 
     else 
     { 
      $this->dbiLink->set_charset("latin1"); 
     } 
     return true; 
    } 
} 

public function fetchResult($result) 
    { 
     /*** 
     * For use with MySQLi->dbiLink Object. 
     * Returns the result as an array of KEY=>VALUE pairs from the Database. 
     **/ 
     $resultsArray = array(); 
     if ($result instanceof mysqli_stmt) { 
      $result->store_result(); 
      $variables = array(); 
      $data = array(); 
      $meta = $result->result_metadata(); 

      while ($field = $meta->fetch_field()) { 
       $variables[] = & $data[$field->name]; // pass by reference 
      } 
      call_user_func_array(array($result, 'bind_result'), $variables); 
      $i = 0; 
      while ($result->fetch()) { 
       $resultsArray[$i] = array(); 
       foreach ($data as $k => $v) 
        $resultsArray[$i][$k] = $v; 
       $i++; 
      } 
     } elseif ($result instanceof mysqli_result) { 
      while ($row = $result->fetch_assoc()) { 
       $resultsArray[] = $row; 
      } 
     } 
     unset($row); 
     return $resultsArray; 
    } 

,在你的PHP代碼頁,你首先需要調用上面的類文件:

require "includes/classes/dbx.class.inc.php"; 

然後,你需要啓動新對象:

$database = new Dbx(); 

現在您可以使用$ database作爲MySQLi連接到您的數據庫。

首先,設置你的5個參數作爲數組(由Codrutz codrutz提到的),因此:

$paramaters[0][] = $param1; 
    $paramaters[0][] = $param2; 
$paramaters[0][] = $param3; 
$paramaters[0][] = $param4; 
$paramaters[0][] = $param5; 
... 
$paramaters[1][] = $param12; 
    $paramaters[1][] = $param22; 
$paramaters[1][] = $param32; 
$paramaters[1][] = $param42; 
$paramaters[1][] = $param52; 

現在你把所有的參數$parameters,您可以編輯您的原始查詢查看給出的五個(或者很多)參數行。

注意:該數據不是直接插入到SQL中,而是應用於MySQL上的?字符,這與使用::variablename結構的PDO略有不同。

foreach ($parameter as $paramRow){ 

$sql = "SELECT *, ROUND(InvoiceNo, 0) AS SnPf, RIGHT(InvoiceNo, 3) AS SnSf FROM table WHERE Unit = ? AND CustomerName = ? AND Component = ? AND Site = ? ORDER BY SnPf DESC, SnSf ASC LIMIT 8"; 
$sqlQuery = $database->prepare($sql); 

準備上面的語句。 bind_param的第一部分是被綁定的數據類型 - (s)tring,(i)nteger,(d)double [數字]或(b)lob [文件/大塊]。 這將內部數組中的值綁定到SQL查詢中的?

$sqlQuery->bind_param("ssss",$paramRow[0],$paramRow[1],$paramRow[2],$paramRow[3]); 
    $sqlQuery->execute(); 
    $result[] = $database->fetchresult($sqlQuery); ///fetches the results using the custom method, above. 
     $sqlQuery->close(); 
} 
//end the foreach loop. 

因此,這現在將有從$result陣列結果的名稱值陣列,每個初始行將對應於$parameters查詢的每一初始行。要想按照你想要的方式反轉數組,你仍然可以使用array_reverse,但是數據是通過名稱來選擇的,並且應該像這樣被引用。

一些預選賽:

我沒想到這個答案讓這個大和PDO是更在操控臺輸出比的MySQLi靈活。我也意識到這可能有點「WOW,wtf?」給你,但別擔心,在其他地方閱讀,它應該都適合幾乎到位。我想,以取代我和以下總結的書面一切的MySQLi/PDO

$parameters = array of values(5) of values(4) 
foreach ($parameter as $row){ 
Apply row array values to the SQL statement 
Get the result 
Arrange the result 
Save the result to an array 
} 

輸出將是一種形式的數組

$結果[parameter] [row per parameter] [table data from row]

再次道歉,這已成爲一個巨大的答案。