【问题标题】:MySQL Fetch Array Boolean error [duplicate]MySQL Fetch Array布尔错误[重复]
【发布时间】:2012-10-04 16:14:39
【问题描述】:

这是我的代码

<?php 
    $result = mysql_query("SELECT * FROM post WHERE username = ".$username." ORDER BY ID DESC ");
    while($row = mysql_fetch_array($result)){ 
    ?>
        <div class="post">
            <a href="/p/<?php echo $row['ID']; ?>" class="post-title"><?php echo $row['title']; ?> - (Rating: <?php echo $row['rank']; ?>)</a>
            <p class="post-content"><?php echo $row['description']; ?><br /><br />On <?php echo $row['date']; ?></p>
        </div>
    <?php }; ?>

但我得到这个错误:

警告:mysql_fetch_array() 期望参数 1 是资源, 第 77 行 /*/programs/user.php 中给出的布尔值

【问题讨论】:

  • 当我在 PHPMyAdmin 上运行搜索并显示 PHP 代码时,我得到的是: $sql = "SELECT * FROM vb_posts WHERE username = \'joshblease\'由ID DESC 订购";
  • 在 $username 上使用斜杠,也可以在 PHP 之外运行查询并检查它是否返回了一些东西。

标签: php mysql arrays fetch


【解决方案1】:

我怀疑你忘了用单引号括起来

$result = mysql_query("SELECT * 
                       FROM post 
                       WHERE username = '".$username."' 
                       ORDER BY ID DESC ");

但是您仍然容易受到 sql 注入的影响。请花点时间阅读下面的文章

Best way to prevent SQL injection in PHP?

【解决方案2】:

mysql_query() 如果出现错误,则返回布尔值FALSE。所以你的SELECT 语句中有一个错误。

在尝试对$result 执行某些操作之前,您应该检查是否为$result === FALSE。如果是$result === FALSE,请使用mysql_error() 了解更多有关问题的信息。

请注意,mysql_query() 和其他 mysql_* 函数已弃用。改用mysqli_*PDO 函数/方法。 PDOmysqli_* 的一大特点是准备好的语句。它们将帮助您避免 SQL 注入攻击。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2011-03-20
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多