WHERE clause effecting SQL query

a 夏天 提交于 2020-01-07 08:32:12

问题


I am trying to make this program where I can delete a thread if I am logged in. Now I already have the button linked and everything, I have it doing multiple tasks when pressed, but it seems to not run the SQL query I want it to. Now I have a variable called $forumid which is set in the URL and retrieved using $_GET['forumid']; I know this is setting properly, because I have done echo $forumid; and its been correct. But there is one line of code that doesn't run for some reason, and that is:

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

Now when I remove the WHERE clause, it works, but it wipes out the entire table. So I now know that the problem is the WHERE clause, I just can't find out why it is the issue. I am fairly new to PHP so please forgive my ignorance. But if anyone is able to see the issue, please tell me. Thank you.

[EDIT: COMPLETE CODE]

<?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>`

回答1:


You need to modify your sql query as like :

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

Hope it works for you now.




回答2:


You can try this way, Hope it will help

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

$db->query($qry);



回答3:


Your query seems to be correct.

If $_GET['forumid'] is a string, do :

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

If $_GET['forumid'] is numeric, do :

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

In any case, string syntax should work, because string will be cast to integer by mysql.

To debug, do :

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

And give us the result, or directly paste it into phpMyAdmin to see the error.

You should also add this line at the top of your script to see all errors :

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']) . "'";
}

or use active record

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



回答5:


Either integer or string syntax in MySQL should work if the threads id is an integer. What I see that could be happening is:

1) $forumid does not have the value you think it has? To check it, var_dump the variable right before the delete query:

var_dump($forumid); die;

2) The table id column is not named "id"? Check the database schema, to check if the column has the name you think it should have. In mysql CLI:

desc threads;


来源:https://stackoverflow.com/questions/29362649/where-clause-effecting-sql-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!