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 回答