2016-05-09 3 views
0

Я не знаю, достаточно ли в заголовке вопроса.Как сохранить значение mysqli_fetch_array() во время цикла?

Я извлекаю несколько идентификаторов из таблицы A, и запрос возвращает несколько строк. Я также получаю некоторые другие идентификаторы из другой таблицы. Вопрос: я хочу проверить, совпадает ли идентификатор таблицы A с идентификатором в таблице B, и если это необходимо, мне нужно напечатать значение, иначе должно быть напечатано другое значение .Как я могу это сделать?

Я попытался использовать два цикла while (один внутри другого), но внутренний цикл while выполняет только один раз, и значение становится равным нулю. Таким образом, он не может проверить состояние.

<?php 
include('includes/template.php'); 
$user=$_SESSION['login_user']; 

if(isset($_POST['action'])){ 
if($_POST['action']=="searchb"){ 
    $query=secure_input($_POST['searchbox']); 
        if(!empty($query)){ 
        $sql="select id,username, name, email from mysql.registration_zany where name like '%".$query."' and privacy=0"; 
          $res=mysqli_query($con,$sql); 
       $resmsg="<div class='alert alert-success' role='alert'>SEARCH RESULTS FOR :<b>".$query."</b></div>"; 
      } 
     } 
} 
$sql2="select id from mysql.friends where id2='".$id."' and Request_Status=1 and id !=".$id; 
$res2=mysqli_query($con,$sql2); 
$i=1; 
while($row=mysqli_fetch_array($res,MYSQLI_NUM)){ 
$flag=0; 
    while($fr[i]=mysqli_fetch_array($res2,MYSQLI_NUM)){ 
    #echo $row[0]; 
if($fr[i][0]==$row[0]){ 
    $flag=1; 
} 
    } 
$i++; 
if($flag){ 
$table="<div class='row'> 
<div class='col-xs-6 col-md-4'> 
    <div class='thumbnail'> 
UserName:".$row[1]."<br>Profile:".$row[2]."<br>E-mail:".$row[3]." 
<p><span class='label label-info'>Friend</span></p></div></div>"; 
echo $table; 
} 
else{ 
$table="<div class='row'> 
<div class='col-xs-6 col-md-4'> 
<div class='thumbnail'> 
UserName:".$row[1]."<br>Profile:".$row[2]."<br>E-mail:".$row[3]." 
<p><form action='request.php' method='post'> 
<input name='action' type='hidden' value='".$row[0]."' > 
    <input type='submit' class='btn btn-primary' name='req' value='Send Request'> 
    </form></p></div></div>"; 
echo $table; 
} 
    } 
?> 

спасибо.

+0

Пожалуйста, используйте PDO. – user3791372

ответ

-1

Внутренний цикл while становится нулевым, и поэтому он не проверяет состояние if внутри него.

Мое предложение состоит в том, чтобы использовать mysqli_free_result(); и после этого выполнить оператор sql вне внутреннего цикла while.

mysqli_free_result($res2); 
$sql2="select id from mysql.friends where id2='".$id."' and Request_Status=1 and id !=".$id; 
$res2=mysqli_query($con,$sql2); 

Надеюсь, это вам помогло.

2

если я правильно понял, Вы хотите проверить каждый идентификатор из первой таблицы на каждое значение во второй таблице ?.

Для простоты я предполагаю, что таблицы существуют на разных серверах и не могут быть соединены.

Если вы храните все идентификаторы в массив $table1[] = $row['id'];

Вы сможете найти с помощью in_array функции РНР, проходя через т умелым 2.

in_array($row['id'], $table1) (True, если значение существует)

Если вы просто хотите знать, что существует в обеих таблицах, но вы можете сделать это в своем SQL. не зная структуру баз данных, я буду делать это свободно

$sql="SELECT 
q1.id, 
count(SELECT q2.id from mysql.friends q2 WHERE q2.id2=q1.id and Request_Status=1 and q2.id !=q1.id) as 'hasmatch', 
q1.username, 
q1.name, 
q1.email FROM mysql.registration_zany q1 WHERE q1.name LIKE '%".$query."' AND q1.privacy=0"; 

я хотел бы играть с этим немного, я немного ржавый, и это может отбросить значения, которые не имеют соответствия. Я надеюсь, что граф устранит эту проблему.