2014-04-01 90 views
-4

所以讓我解釋一下我的問題,讓我們假設我運行查詢像這樣:關於SQL查詢的信息,保存用php

$myquery = sql_query("SELECT name FROM table WHERE name='example' LIMIT 0,1"); 

現在..我想檢索到的名稱存儲到一個變量,所以我會做這樣的事情:

while ($myrow = sql_fetch_assoc($myquery)) { 

      transfer_row($myrow); 
       print"Name: $row_name"; 
    } 
    $stored_name = $row_name; 

注:transfer_row()只是我寫一個函數,$ myrow [ '名']並將其存儲在$ ROW_NAME,爲了便於參考

現在,在這個階段一切都很好,這裏是它變得有趣的地方。請注意,在這個階段,我仍然有一個分配給$ row_name的名稱。再往下頁我運行另一個查詢來檢索表中的一些其他的信息,我需要檢索的事情之一是名稱的列表了,所以我只想運行此查詢:

$myquery = sql_query("SELECT name, year FROM table WHERE DESC LIMIT 0,10"); 

    while ($myrow = sql_fetch_assoc($myquery)) { 

     transfer_row($myrow); 

    $year = $row_year; 

     $link = "/$year"; 

     print "<li style=\"margin-bottom: 6px;\"><a href=\"$link\">$row_name</a>\n"; 

    } 

現在,如果這個查詢中的$ row_name與舊查詢中的$ row_name相匹配,我想編寫一個if語句來執行,這就是爲什麼我們在變量中存儲了第一個$ row_name。

if ($row_name == $stored_name){ 
    // execute code 
} 

然而,由於大多數人都知道,這不會工作,原因是,它只是再需要$ stored_name並提出新的$ ROW_NAME到$ stored_name,等於是第一個$ ROW_NAME的值丟失,現在,對於我的應用程序來說,至關重要的是我訪問第一個$ row_name並在第二個查詢運行後比較它,我可以在這裏做什麼?如果什麼都不能做,那麼實現這種目標的替代方案是什麼。

謝謝。

編輯,MY transfer_row()函數:

function transfer_row($myrow) { 

    global $GLOBALS; 

    if(is_array($myrow)) { 
     foreach ($myrow as $key=>$value) { 

      $key=str_replace(":","",$key); 
      $GLOBALS["row_$key"] = $value; 
     } 
    } 

} 
+0

你在哪裏把這個if語句?在while循環內?爲什麼你不能比較而不使用「transfer_row」? – Colandus

+0

你的問題是無關緊要的,如果我沒有轉移行比較,沒有什麼區別。 – user3332590

+0

不好意思?這是絕對相關的。如果我們不知道在哪種情況下會發生這種比較,我們將假定它在while循環內。在那種情況下,大衛的答案是正確的。在執行'transfer_row'調用之前進行比較。 – Colandus

回答

0

在您的第一個查詢中,您正在選擇name字段WHERE name='example',那麼爲什麼你在查詢呢?你已經有了你想要的。

您所查詢,如:

Hey? roll no 21 what is your roll no?

因此,只有進行第二次查詢和使用,如果條件爲:

if ($row_name == 'example'){ 
    // execute code 
} 

是否有意義?

更新

//How about using prefix while storing the values in `$GLOBAL` ?? 

transfer_row($myrow, 'old_'); //for the first query 
transfer_row($myrow, 'new_'); //for the second query 

function transfer_row($myrow, $prefix) { 

    global $GLOBALS; 

    if(is_array($myrow)) { 
     foreach ($myrow as $key=>$value) { 

      $key=str_replace(":","",$key); 
      $GLOBALS["$prefix"."row_$key"] = $value; 
     } 
    } 

} 

//Now compare as 

if ($new_row_name == $old_row_name){ 
    // execute code 
} 

//You'll not need `$stored_name = $row_name;` any more 
+0

你太過專注於查詢和什麼即時通訊使用它,如果它不夠明顯(它非常明顯)查詢和我使用的示例只是佔位符,在我的真實應用程序中有需要做什麼我正在做,而且不可能用你的「答案」。 – user3332590

+0

@ user3332590'原因是,它只是再次使用$ stored_name並將新的$ row_name放入$ stored_name,所以因此第一個$ row_name的值丟失了,您知道問題從那裏解決,請參閱我的更新線索。 – Lekhnath

1

沒有你張貼的代碼功能transfer_row,我們將無法給你完全匹配你要求什麼答案,但我可以給你一個解決手頭問題的答案。

當匹配以檢查名稱是否相同時,可以將if語句修改爲以下內容。

if ($row_name == $myrow['name']){ 
    // execute code 
} 

雖然我建議你做,但由於我沒有代碼到transfer_row函數,所以要將第二個變量傳遞給該函數。第二個變量將作爲變量名稱的前綴,因此可以存儲和保存唯一的值。從第二個呼叫使用transfor_row功能

+0

爲什麼你不能幫忙,我已經明確地寫了,用粗體寫出了transfer_row()所做的事情。你的回答是不準確的,如果你閱讀我的文章,你會發現$ row_name與$ myrow ['name] – user3332590

+0

相同但是我們需要函數的代碼來修改它以允許使用前綴來代替'row_',所以你不會再遇到這樣的問題。或者你可以使用關聯數組。 – David

+0

然後向我解釋爲什麼這是,我告訴過你它做了什麼。 – user3332590

1

副歌所以你的比較就變成了: if ($myrow['name'] == $row_name)

如果需要使用此功能,您可以在第二個數據庫調用之前做了一個任務:

$stored_name = $row_name; 
... 
transfer_row($myrow); 
+0

請閱讀我的文章,你的第二個選項不會工作,因爲我已經做到了這一點。 – user3332590

+0

在第二次調用transfer_row之前,您需要執行'$ stored_name = $ row_name;'**。沒有理由這不起作用。 – Laoujin

+0

我不知道還有什麼話要對你說,你可以在我的代碼中清楚地看到我已經做到了。您在我的文章中看到的所有內容均按照與我的代碼中相同的順序發佈。 – user3332590