WHERE子句影响SQL查询

时间:2015-03-31 07:09:03

标签: php mysql phpmyadmin

我正在尝试制作这个程序,如果我已经登录,我可以删除一个线程。现在我已经将按钮链接到了所有内容,我按下时执行了多个任务,但似乎没有运行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>`

5 个答案:

答案 0 :(得分:0)

您需要修改您的SQL查询,如:

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

希望它现在适合你。

答案 1 :(得分:0)

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 '); 

答案 2 :(得分:0)

你可以尝试这种方式,希望它会有所帮助

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

$db->query($qry);

答案 3 :(得分:0)

您的查询似乎是正确的。

如果$ _GET [&#39; forumid&#39;]是一个字符串,请执行:

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

如果$ _GET [&#39; forumid&#39;]是数字,请执行:

$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 :(得分:0)

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

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

var_dump($forumid); die;

2)表id列未命名&#34; id&#34;? 检查数据库架构,检查列是否具有您认为应具有的名称。在mysql CLI中:

desc threads;