2016-11-15 66 views
0

我想問一下。如何在PHP MySQL中的while語句中停止循環?

可以加exit();在每個語句結束時還是有什麼好方法,除了exit();

原因是停止循環顯示數據,因爲如果我刪除/禁用退出();,數據將循環並顯示數據庫表中可用的所有行。 else語句也會執行,如果exit();從代碼中刪除。

如下面的代碼:

<?php 
    $connect  = mysqli_connect("localhost", "root", "", "database"); 
    global $connect; 

    if(isset($_POST['Submit'])){ 
     $input  = $_POST['input']; 

     $sql = "SELECT * FROM table"; 
     $get = mysqli_query($connect,$sql); 
     if($get && mysqli_num_rows($get) > 0){ 
      while($row = mysqli_fetch_assoc($get)){ 
       $input_db = $row['input']; 
       $output_db = $row['output']; 

       if (($input >= $input_db) && ($output <= $output_db)) 
       { 
        echo "Input and output is in between"; 
        exit(); 
       } 
       else 
       { 
        echo "Data added ! <br/>"; 
        exit(); 
       } 
      } 
     mysqli_free_result($get); 
     } 
     else 
     { 
      echo "data is outside range"; 
     } 
    } 
?> 
<form action="testdate.php" method="post"> 
    <table> 
     <tr> 
      <td><i class="fa fa-unlock-alt"></i> </td> 
      <td>Input : </td> 
      <td><input type ="text" name="input" size="30"></td> 
     </tr> 
    </table>  

    <p><input class="btnSuccess" type ="submit" name="Submit" value="Submit"> </p>    
</form> 

感謝。

+0

您以前曾經使用過'break'嗎? http://www.php.net/break – Irvin

+0

不太擅長它..這就是爲什麼我使用while循環:) – Jamilah

+0

你能澄清嗎?它可以在SQL級別過濾嗎? (例如WHERE條件) – Ronald

回答

0

要直接回答該問題,您可以簡單地將exit();break;對換。這停止循環,但不退出:

// Let's go infinite.. 

while(true) 
{ 

echo 'This only appears once, because we\'re breaking out of the loop.'; 

// Not today! 
break; 
} 

// Everything is normal again down here. 
echo 'That was a close one!'; 

在特定情況下,更好的方法是只選擇你需要數據,否則MySQL將忙於將整隻表的PHP下降最它收到的數據。事情是這樣的:

<?php 
$connect  = mysqli_connect("localhost", "root", "", "database"); 
global $connect; 

if(isset($_POST['Submit'])) 
{ 
    $input  = (int)$_POST['input']; // * See note below 

    $sql = "SELECT * FROM table where ".$input.">=`input` and ".$output."<=`output`"; 

    $get=mysqli_query($connect,$sql); 

    if($get && $get->num_rows) 
    { 
     echo "Input and output is in between"; 
    } 
    else 
    { 
     echo "data is outside range"; 
    } 
} 
?> 
  • (int)是一個簡單的安全措施 - 它可以防止有人進行SQL注入。你也需要去$output。如果可能的話,使用準備好的查詢
+0

但如果我使用這種技術,我將如何調用數據庫中的數據?我的意思是說,使用while($ row = mysqli_fetch_array()).... $ data = $ row ['data'];在你的建議代碼中如何調用數據? – Jamilah

+0

如果您的查詢確實有多行,那麼您可以像以前一樣循環它們 - 您無需退出,因爲所有結果行都是「相關的」。 (編輯:我認爲你只需要一行,因爲你現有的代碼只能處理一個)。 –

+0

已經嘗試過。沒有運氣到目前爲止..代碼不起作用 – Jamilah