你可以用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
]
再次道歉,這已成爲一個巨大的答案。
你想說的是,你不能在php中循環一堆語句。 這很容易我的朋友。只需 創建一個循環,並將您現有的代碼粘貼到循環中。並排除這一個 mysql_select_db($ database_OASDB,$ OASDB); – 2015-03-03 13:17:34
參數如何不同? – RST 2015-03-03 13:19:51
只是一個提示:使用mysqli函數,mysql函數暫時被取消,並且在即將發佈的PHP版本中將被禁用。你也可以使用pdo,但與mysql函數相比,這是一個不同的故事。 – mondjunge 2015-03-03 13:36:48