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

时间:2015-03-03 13:14:28

标签: php mysql

我已经在这个问题上摸不着头几天了,我想我错过了那个显而易见的事情,所以我希望有人可以提出一些建议。

我有一个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次。

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

任何想法都会受到赞赏..

由于

安德鲁

2 个答案:

答案 0 :(得分:1)

您可以使用PDO或MySQLi执行此操作,您当前的MySQL版本 DEPRECATED 并强烈建议不要使用它,而是查看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 [numeric]或(b)lob [file / big chunks]。 这会将内部数组中的值绑定到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]

再次道歉这已成为一个巨大的答案。

答案 1 :(得分:0)

创建一个包含您要使用的参数的数组,并使用foreach使用您作为参数创建的数组元素循环语句。