使用不同的php参数重复mysql查询


repeat mysql query with different parameters 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次该语句。

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

任何想法都将不胜感激。。

感谢

Andrew

您可以使用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)string、(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灵活得多。我也意识到,这其中的大部分内容对你来说可能有点"哇,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
}

您的输出将是形式的数组

$result[parameter][row per parameter][table data from row]

再次道歉,这已经变成了一个巨大的答案。

使用要使用的参数创建一个数组,并使用foreach将创建的数组元素作为参数循环执行语句。