2017-11-26 5 views
0

これは動作しないコードです:SQL行選択の比較が機能していませんか?

 $query = "SELECT * FROM $table WHERE text_id > '$last_id'"; //SELECT NEW MESSAGES 
     $result = mysqli_query($connection,$query); 

     if ($result && mysqli_num_rows($result) > 0) 
     { 
      //THIS SHOULD NOT BE RUNNING 
     } 

私はオーバー確認したとオーバーphpMyAdminの中で、テーブル内のtext_idと$ last_idが整数値の両方である「1」。つまり、条件はコードが実行されるたびに真となります。

私はこのコードをうんざりしていますか、または私の考えは不適切ですか?ここで

は、全体のスクリプトです:

<?php 
    session_start(); 
    $alias = $_SESSION['username']; 

    $host = 'localhost'; 
    $user = '*'; 
    $pass = '*'; 
    $database = 'vethergen_db_accounts'; 
    $table = 'table_messages'; 
    $last_id_table = 'table_chat_sync'; 
    $connection = mysqli_connect($host, $user, $pass) or die ("Unable to connect!"); 
    mysqli_select_db($connection,$database) or die ("Unable to select database!"); 

    $last_id_query = "SELECT alias FROM $last_id_table WHERE alias = '$alias'"; 
    $last_id_result = mysqli_query($connection,$last_id_query); 
    $last_id_rows = mysqli_fetch_array($last_id_result); 

    if ($last_id_rows['alias'] === $alias) 
    { 
     $last_id = $last_id_rows['last_id']; 
     $query = "SELECT * FROM $table WHERE text_id > '$last_id'"; //SELECT NEW MESSAGES 
     $result = mysqli_query($connection,$query); 

     if ($result && mysqli_num_rows($result) > 0) 
     { 
      while($row = mysqli_fetch_array($result)) 
      { 
       if ($row['alias'] === "Vether") 
       { 
        echo '<p id = "chat_text">'.'<b>'.$row['alias'].'</b>'.': '.$row['text']."</p>"; 
        echo '<p id = "time_stamp">'.$row['time'].'</p>'; 
        echo '<p id = "chat_number">'.$row['text_id'].'</p>'; 
       } 
       else 
       { 
        echo '<p id = "chat_text">'.'<b class = "bold_green">'.$row['alias'].'</b>'.': '.$row['text']."</p>"; 
        echo '<p id = "time_stamp">'.$row['time'].'</p>'; 
        echo '<p id = "chat_number">'.$row['text_id'].'</p>'; 
       } 
       echo '<hr class = "chat_line"></hr>'; 
       $last_row_id = $row['text_id']; 
      } 
     } 


     //UPDATE LAST SYNC ID 
     $update_query = "UPDATE $last_id_table SET last_id = '$last_row_id' WHERE alias = '$alias'"; 
     mysqli_query($connection,$update_query); 
    } 
    else 
    { 
     $update_query = "INSERT INTO $last_id_table (alias, last_id) VALUES('$alias','-1')"; 
     mysqli_query($connection,$update_query); 
    } 
?> 
+1

'echo $ query'を確認してPhpmyadminに貼り付けて確認してください。 –

+0

潜在的なSQLインジェクションのファンである別の人 –

+0

変数$ last_idから一重引用符を削除してからお試しください。 –

答えて

1

あなたは変更する必要があります。

WHERE text_id > '$last_id' 

text_id

WHERE text_id > $last_id 

にカラム整数であり、文字列のように比較することができません。

+0

私はそれを試みました - 比較は完全に失敗しました。 text_id = 1および$ last_id = 0の場合、条件は実行されませんでした。 – Vether

+0

"条件が実行されませんでした"あなたはそれを説明しますか?あなたは誤りを犯していますか? – lucky

+0

また、あなたのテーブル名は "$ table"ですか?それとも、PHPの変数ですか? – lucky

関連する問題