2012-07-27 104 views
1

我需要運行多個使用PHP的Mysql查詢。我有一個網站,並從DATABSE把所有的信息使用PHP運行多個Mysql查詢

$sql = "SELECT * FROM $table WHERE ID=$escape"; 
$query = mysql_query($sql) or die(mysql_error()); 
$rentals = mysql_fetch_assoc($query); 

現在我有我還需要爲上一頁和下一頁按鈕

$sqlPrev = 'SELECT `id` FROM `table` 
     WHERE `id` < '$curId' AND `catId` = '$curCat' 
     ORDER BY `id` DESC LIMIT 1; 

$sqlNext = 'SELECT `id` FROM `table` 
     WHERE `id` > '$curId' AND `catId` = '$curCat' 
     ORDER BY `id` ASC LIMIT 1; 

我有編碼權當我運行運行其他兩個查詢這些在PHP MyAdmin中,但是當我嘗試通過網站執行它們時,我得到一個mysql錯誤!

+0

你會得到什麼錯誤? – 2012-07-27 21:07:22

+2

錯誤可能與您的無與倫比的單引號有關嗎? – Palladium 2012-07-27 21:07:53

+1

當然,看起來像引號的問題,發佈錯誤,你會得到幫助,雖然。 – Mahn 2012-07-27 21:08:44

回答

0

mysql_query一次只能執行一個查詢。

基本上你只需要有3個電話mysql_query

$sql = "SELECT * FROM $table WHERE ID=$escape"; 
$query = mysql_query($sql) or die(mysql_error()); 
$rentals = mysql_fetch_assoc($query); 

$sqlPrev = 'SELECT `id` FROM `table` 
     WHERE `id` < ' . $curId . ' AND `catId` = ' . $curCat . ' 
     ORDER BY `id` DESC LIMIT 1'; 

$sqlNext = 'SELECT `id` FROM `table` 
     WHERE `id` > ' . $curId . ' AND `catId` = ' . $curCat . ' 
     ORDER BY `id` ASC LIMIT 1'; 

$resultPrev = mysql_query($sqlPrev); 
$resultNext = mysql_query($sqlNext); 

// todo: check that the above queries executed successfully 
// if (!$resultPrev) echo mysql_error(); 

if (mysql_num_rows($resultPrev)) { 
    $prev = mysql_fetch_array($resultPrev); 
    $prevId = $prev['id']; 
} else { 
    $prevId = null; // there is no previous item 
} 

if (mysql_num_rows($resultNext)) { 
    $next = mysql_fetch_array($resultNext); 
    $nextId = $next['id']; 
} else { 
    $nextId = null; // there is no next item 
} 
+0

我工作在上面列出的代碼,但我無法獲得下一個或以前的ID回聲? – 2012-07-30 03:07:05

+0

$ curID = $ ID; $ curCAT = $ CTGID; $ sqlPrev =「SELECT'ID'FROM」。$ table。「WHERE'ID'<」。 $ curID。 「AND'CTGID'=」。 $ curCAT。 「ORDER BY'ID'DESC LIMIT 1」; $ sqlNext =「SELECT'ID'FROM」。$ table。「WHERE'ID'>」。 $ curID。 「AND'CTGID'=」。 $ curCAT。 「ORDER BY'ID'ASC LIMIT 1」; – 2012-07-30 03:09:04

+0

$ resultPrev = mysql_query($ sqlPrev); $ resultNext = mysql_query($ sqlNext); if(mysql_num_rows($ resultPrev)){ \t $ prev = mysql_fetch_array($ resultPrev); \t $ prevID = $ prev ['ID']; } else { \t $ prevID = null; } if(mysql_num_rows($ resultNext)){ \t $ next = mysql_fetch_array($ resultNext); \t $ nextID = $ prev ['ID']; } else { \t $ nextID = null; } – 2012-07-30 03:09:18

1

問題是$ sqlPrev和$ sqlNext中的「而不是」,{$ curID}僅適用於「」 並沒有結束「或」。

0

你可能需要將字符串文字和變量之間加連接符(.)。 (這是Perl所必需的;我在PHP中做同樣的事情。)

$sqlPrev = 'SELECT `id` FROM `table` 
    WHERE `id` < '.$curId.' AND `catId` = '.$curCat.' 
    ORDER BY `id` DESC LIMIT 1'; 

迴應發送到數據庫的SQL文本。這將揭示問題。

0

對於多個查詢,您需要在調用另一個查詢之前使用多個查詢或關閉結果。例如,如果您使用面向對象的風格編寫代碼。

$conn = new mysqli($servername, $username, $password, $dbname); 
$sql="SELECT * FROM mytable"; 
$result=$conn->query($sql); 
echo $result->num_rows; 
$sql="SELECT id FROM mytable"; 
$result2=$conn->query($sql); 
echo $result2->num_rows; // does not work because result was not closed. 

爲了讓它起作用,請寫下它。

$conn = new mysqli($servername, $username, $password, $dbname); 
$sql="SELECT * FROM mytable"; 
$result=$conn->query($sql); 
echo $result->num_rows; 
$result->close(); //*********notice this new line. result 
//needs to be closed before calling another query 
$sql="SELECT id FROM mytable"; 
$result2=$conn->query($sql); 
echo $result2->num_rows; // **this does work because previous result 
// was closed. 

如果您需要一次執行多個查詢或在完成前一個輸出行之前需要執行查詢,請使用多查詢。我使用多查詢的第二個原因,獲得另一個查詢之前輸出前一個的所有行。這對於嵌套查詢很重要,例如在另一箇中間的查詢中,比如在論壇的多個嵌套線索中,或者在某些網頁上使用嵌套回覆。

下面是在另一個查詢中間完成的一個查詢的示例。

$conn = new mysqli($servername, $username, $password, $dbname); 
$sql="SELECT * FROM mytable"; 
$conn->multi_query($sql); 
$result=$conn->store_result(); 
$count=0; 
while($row = $result->fetch_assoc()) { 
    echo "$result['id'] $result['name']; 
    if ($count==0) { 
    // now you can do another query in the middle of this one 
    $sql="SELECT id FROM mytable"; 
    $conn->multi_query($sql); 
    $result2=$conn->store_result(); 
    $row2=$result2->fetch_assoc(); 
    echo "result of second query is: $row2['id'] $row2['name']"; 
    } 
    $count=$count+1; 
}