【问题标题】:WHERE clause effecting SQL query影响 SQL 查询的 WHERE 子句
【发布时间】:2015-06-04 10:31:58
【问题描述】:

我正在尝试制作这个程序,如果我登录,我可以在其中删除一个线程。现在我已经链接了按钮和所有内容,按下时我让它执行多个任务,但它似乎没有运行 SQL 查询我想要它。现在我有一个名为 $forumid 的变量,它在 URL 中设置并使用 $_GET['forumid']; 检索。 我知道这是正确设置的,因为我已经完成了 echo $forumid;它是正确的。但是有一行代码由于某种原因没有运行,那就是:

$db->query("DELETE FROM threads WHERE id='$forumid'");

现在,当我删除 WHERE 子句时,它可以工作,但它会清除整个表。所以我现在知道问题出在 WHERE 子句上,我只是不知道为什么会出现问题。我对PHP相当陌生,所以请原谅我的无知。但如果有人能够看到这个问题,请告诉我。谢谢。

[编辑:完整代码]

<?php
require 'connect.php';
session_start();

$forumid = $_GET['forumid'];
$title;
$body;
$by;
$loggedAsAuthor;

?>
<html>
<head>
    <title>Legend Factions - View Forum</title>
    <link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
    <div id="header">
        <a href="index.php">Home</a>&nbsp;&nbsp;
        <a href="forum.php">Forum</a>&nbsp;&nbsp;
        <a href="vote.php">Vote</a>&nbsp;&nbsp;
        <a     href="http://legacyfactionsraid.buycraft.net/">Donate</a>&nbsp;&nbsp;
        <a href="members.php">Members</a>
    </div>
    <div id="content">
        <div id="divider">
            <?php

            if ($result = $db->query("SELECT * FROM threads")) {
                while ($row = $result->fetch_assoc()) {
                    if ($row['id'] == $forumid) {
                        $title = $row['title'];
                        $body = $row['words'];
                        $by = $row['by'];
                        if ($_SESSION['sess_username'] == $by || $_SESSION['sess_username'] == "admin") {
                            $loggedAsAuthor = true;
                        }
                    }
                }
            }

            echo '<h2>', $title, '</h2><br/><label>By: ', $by;

            if (isset($loggedAsAuthor)) {
                echo '<form action="viewForum.php" method="post">
                        <br/><input type="submit" name="delete" value="Delete Thread"/>
                    </form>';
            }

            $delete = $_POST['delete'];
            if (isset($delete)) {
                $db->query("DELETE FROM threads WHERE id=$forumid ");
                //header("Location: forum.php");
            }

            ?>
            <hr/>
            <?php

            echo $body;

            ?>
        </div>
    </div>
</body>
</html>`

【问题讨论】:

  • 你在数据库中有id= $forumid 的记录吗?
  • 回显查询并检查查询错误...
  • 回显您的查询并直接在phpmyadmin中运行
  • 您的threads 表是什么样的?您确定要查找id 还是其他字段,例如forum_id
  • 为什么同一个问题要发两次? stackoverflow.com/questions/29361203/…

标签: php mysql phpmyadmin


【解决方案1】:

您需要修改您的 sql 查询,如下所示:

$db->query("DELETE FROM threads WHERE id= $forumid "); // removed single quotes 

希望它现在对你有用。

【讨论】:

  • 您运行此代码时是否有任何错误? @user3670816
【解决方案2】:

你可以试试这个方法,希望对你有帮助

$qry = "DELETE FROM threads WHERE id= $forumid ";

$db->query($qry);

【讨论】:

    【解决方案3】:

    您的查询似乎是正确的。

    如果 $_GET['forumid'] 是一个字符串,那么:

    $db->query("DELETE FROM threads WHERE id=".$db->quote($_GET['forumid']));
    

    如果 $_GET['forumid'] 是数字,那么:

    $db->query("DELETE FROM threads WHERE id=".(int)$_GET['forumid']);
    

    无论如何,字符串语法应该可以工作,因为字符串将被mysql转换为整数。

    要调试,请执行以下操作:

    echo "DELETE FROM threads WHERE id=".$db->quote($_GET['forumid']) ;
    

    并将结果给我们,或者直接粘贴到phpMyAdmin中查看错误。

    您还应该在脚本顶部添加这一行以查看所有错误:

    error_reporting(E_ALL) ;
    ini_set('display_errors', true) ;
    

    【讨论】:

      【解决方案4】:
      if(isset($_GET['forumid']) && !empty($_GET['forumid'])){
          $qry = "DELETE FROM threads WHERE id= '" . mysql_real_escape_string ($_GET['forumid']) . "'";
      }
      

      或使用活动记录

      $this->db->where('id', $forumid );
         $this->db->delete('threads '); 
      

      【讨论】:

        【解决方案5】:

        如果线程 id 是整数,MySQL 中的整数或字符串语法都应该有效。我看到可能发生的是:

        1) $forumid 没有你认为的价值? 要检查它,请在删除查询之前 var_dump 变量:

        var_dump($forumid); die;
        

        2) 表id列不命名为“id”? 检查数据库架构,以检查列是否具有您认为应该具有的名称。在 mysql CLI 中:

        desc threads;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多