所以让我解释一下我的问题,让我们假设我像这样运行查询:
$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;
}
}
}
答案 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