2014-04-01 30 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