2016-09-19 418 views
-1

我試圖運行一些查詢來交換數據庫中的排序順序值時,上或下按鈕被點擊但是當他的代碼下面執行第二個查詢是跑。PHP多個MYSQL查詢執行,但只有最後一個工作

if ($_POST['up']){ 
    $sort_this = $_POST['sort']; 
    $sort_other = $_POST['sort'] - 1; 

    $sql_this = "UPDATE portfolio SET sort = $sort_this -1 WHERE sort = $sort_this"; 
    mysqli_query($conn, $sql_this); 

    $sql_other = "UPDATE portfolio SET sort = $sort_other +1 WHERE sort = $sort_other"; 
    mysqli_query($conn, $sql_other); 
} 

他們都工作在自己完全正常,當我註釋掉等,然而,當他們都顯示的問題如上。我也嘗試在mysqli_multi_query中運行它,但是這也沒有奏效。

任何想法? 謝謝

+2

'$ sort_other = $ _POST ['sort'] - 1;'和SET sort = $ sort_other + 1' - 嗯...你不是取消這些?儘管我記得我的數學,-1加+1等於0. –

+0

$ sort_other = $ _POST ['sort'] - 1;是標識符,例如,如果這行是5,另一行是5 - 1 = 4。SET sort = $ sort_other +1是我想要的新值,無論我使用SET sort = $ sort_other +1還是$ sort_this他們都是一樣的。 –

+0

爲了澄清,我在問題中添加了您的評論(作爲編輯)。你也得到了答案。 –

回答

3

鑑於數據量有限,我最好的猜測是他們都執行,但他們沒有做你認爲他們應該做的

說$ _ POST [「排序」]是3號,這意味着$ sort_this也是3 第一個查詢將通過數據庫和更新所有3的一個2

$ sort_other會3-1(2),所以第二個查詢將通過數據庫並將所有2更新爲3.有效地撤消第一個查詢的作用。 (並且將其他2更改爲3)

您將永遠不會看到第一個查詢的最終結果,因爲第三個查詢將覆蓋第一個查詢所做的所有更改。

此外,簡單地將變量粘貼到查詢中,就像您正在做的那樣是不好的做法。它很容易發生SQL注入。你可以通過使用預先準備的語句來避免這種情況:http://php.net/manual/en/pdo.prepared-statements.php

+1

一個非常好的解釋,我猜是我(基本上)在評論中說的-1加+1取消自己。我用OP的評論來編輯這個問題,他想達到什麼目的。 –

+0

我可以看到你在說什麼,如果他們都更新同一行,但他們正在更新不同的行。 $ sort_this = 5,$ sort other = 4.從第一個查詢:WHERE sort = $ sort_this。從第二個查詢:WHERE sort = $ sort_other –

+0

Lee perkins,他們沒有更新不同的行。數據庫在兩個查詢之間改變。給定5的值(根據您的新編輯)sort_this將變爲「5」,sort_other將變爲4. 第一個查詢將爲 UPDATE portfolio SET sort = 4 WHERE sort = 5 在數據庫中的所有原始5之後將是4的 第二個將是: UPDATE組合SET排序= 5 WHERE排序= 4 之後,數據庫中的所有4(包括來自第一個查詢的)將變爲5。 在這樣做第二個查詢顛倒了第一個查詢:)因爲所有5變成了4現在變成了5 –

相關問題