1

タイトルが示すように、非常に単純なスクリプトであり、これまでこの問題に遭遇したことはありません。ニュース システムのデータを取得するだけです。私がテストしているIDは、データベースの「2」です。しかし、 article.php?id=2fjfkhshs を実行すると、エラーの代わりに ID "2" の情報が表示されます。「id」は、データベース内の A_I プライマリ int です。

       <?php
          $nid = mysql_real_escape_string($_GET['id']);
          $newsQuery = mysql_query("SELECT * FROM news WHERE id = '$nid' LIMIT 1");
          $newsExist = mysql_num_rows($newsQuery);
          $newsData = mysql_fetch_array($newsQuery);

          if ($newsExist == 1) {
            echo $newsData['title'];
          }
          else {
            echo "error";
          }
          ?>
4

1 に答える 1

1

MySQL では、数値を文字列と比較するときに、文字列も数値にキャストされます。

SELECT 2 = '2abcdxyz';

結果は1

基本的に、文字列を数値にキャストすると、文字列は最初の非数値文字に切り捨てられます。

SELECT CAST('2zbcxyz' AS UNSIGNED INTEGER);

結果は2

代わりに、完全に一致させるには、次を使用できます。

SELECT BINARY 2 = '2abcdxyz';

ここで実際に見てください:http://sqlfiddle.com/#!2/01abf/2

于 2013-04-03T02:28:57.507 に答える