有关SQL查询的信息,存储在php中

时间:2014-04-01 12:00:25

标签: php mysql variables

所以让我解释一下我的问题,让我们假设我像这样运行查询:

$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 [' name']并将其存储在$ 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
}

然而,正如大多数人所知,这个WONT工作,原因是,它只需再次使用$ 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;
        }
    }

}

3 个答案:

答案 0 :(得分:1)

如果您没有发布函数transfer_row的代码,我们将无法为您提供与您要求的完全匹配的答案,但我可以给您一个解决方案来解决手头的问题。

当匹配以检查名称是否相同时,您可以将if语句修改为以下内容。

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

我建议你做什么,但由于我没有传递transfer_row函数的代码,所以要将第二个变量传递给该函数。第二个变量将是变量名称的前缀,因此您可以存储和保存唯一值。

答案 1 :(得分:1)

请勿在第二次通话中使用transfor_row功能,以便进行比较: if ($myrow['name'] == $row_name)

如果需要使用此功能,可以在第二次数据库调用之前进行分配:

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

答案 2 :(得分:0)

在您的第一个查询中,您选择了name字段WHERE name='example',为什么要查询?你已经拥有了自己想要的东西。

您的查询如下:

Hey? roll no 21 what is your roll no?

因此,仅执行第二个查询并将if条件用作:

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