Mysql删除查询将无法在灯堆上工作

时间:2013-04-16 03:00:49

标签: mysql php lamp phpmyadmin

我正在做一个关于php的项目工作。在我的工作中,每个查询都能顺利进行。但是,当我想删除任何使用它的对象时,不会删除...

这是我的PHP代码

<?php
//delete item
if(isset($_GET['deletecat'])){
    $id_to_delete = $_GET['deletecat'];
    $sql = mysql_query("DELETE FROM `category` WHERE `Category_id`=$id_to_delete LIMIT 1") or die('Error: Could not delete.');
    }
    else{
    header('location: category.php');
    exit();
    }       
?>

之后我只收到错误消息。 GET值正常。在我的phpmyadmin上,这个SQL运行正常。但是当我想要删除任何对象时会出现弹出消息。我现在该怎么办?

2 个答案:

答案 0 :(得分:0)

你应该首先转义GET变量以避免任何SQl注入攻击,如deceze已经说过的那样。然后,您应该了解phpmyadmin给出的消息是否需要执行删除查询。您可以使用mysql_real_escape_string($value)来逃避,但正如php供应商所说,此功能将很快被删除,目前已被弃用。 再见..

答案 1 :(得分:0)

您可能会遇到一些问题:使用数据库连接,查询或您要发送的数据。

另外,你没有过滤“和'标记,所以你可能会遇到麻烦,而且你不能确保你的id是一个数字,所以你的sql也可能在那里失败。

但是,您可以通过对代码进行一些调整来解决这个问题....您可以在代码中插入一些诊断信息,以查看mysql报告错误的原因,并更好地了解如何修复它。

请注意,[一般建议] [1]使用mysqli扩展而不是mysql扩展,但无论如何,这里的示例代码包含您当前使用的扩展

希望这有帮助!

<?php

    if ( isset($_GET['deletecat'])) {

        #dbh -> database resource. 
        $dbh = mysql_connect()

        #mysql_connect returns false if it fails. capture error and echo to output.
        if (!$dbh) {
            die("Could not connect to database server: ".mysql_error()."\n");
            #if using mysqli use mysql_connect_error() instead
        }

        #never trust input. use an escape function.    
        $id_to_delete = mysql_real_escape_string($_GET['deletecat'],$dbh);

        #force $id_to_delete to be treated as a number, or make it safer in your sql. 
        #i used the latter method below.
        $sql = "DELETE FROM `category` WHERE `Category_id` = '$id_to_delete' LIMIT 1");

        #mysql_query returns false on failure
        $result = mysql_query($sql,$dbh);

        #on failure catch the error and display the exact contents of 'deletecat' in a web-friendly way.
        if (!$result) {
            $error=mysql_error($dbh);
            die ("Error: Could not delete '"
                 .htmlentities(print_r($_GET['deletecat'],true)).". Error: $error\n"
            );

       }

       #if we did not trigger die() above we are ok.
       header('location: category.php');
       exit();
    }
?>

[1]:在http://php.net/manual/en/function.mysql-connect.php

看警告