PHP中的MySQL删除查询在IF语句中不起作用

时间:2014-06-05 07:12:39

标签: php mysql sql-delete

我制作了一个脚本,从一个表中插入另一个表中的一行,但是它必须从一个表中删除该记录。由于某些原因,这是行不通的。有人可以帮我解决这个问题吗?

我的代码:

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/layout.css"/>
        <?php session_start();
           if(!isset($_SESSION['login_id'])){
           $url = 'helpdesklogin.php';
           header("Location: $url");
            }
        ?>
    </head>
    <body>
    <?php
    $server="localhost";
    $username="root";
    $password="";
    $connect_mysql=mysql_connect($server,$username,$password) or die ("Connection Failed!");
    $mysql_db=mysql_select_db("helpdesk_middenpolder",$connect_mysql) or die ("Could not Connect to Database");
    $id=$_GET['id'];
    $query=mysql_query("INSERT INTO afgehandelden_incidenten SELECT * FROM incidenten WHERE incidentID='$id'");
    $result=mysql_query($query);
    if($result=mysql_query($query)){
        $query2=mysql_query("DELETE FROM incidenten WHERE incidentID=$id");
    }
    else {
    echo mysql_error();
    }

    ?>
    </body>
</html>

4 个答案:

答案 0 :(得分:2)

错误的方式:

$query=mysql_query("INSERT INTO afgehandelden_incidenten SELECT * FROM incidenten WHERE incidentID='$id'");
$result=mysql_query($query);

使用“mysql_query()”两次

执行插入查询两次

你可以这样做:

$query="INSERT INTO afgehandelden_incidenten SELECT * FROM incidenten WHERE incidentID='$id'";
$result=mysql_query($query);

答案 1 :(得分:1)

if($result=mysql_query($query))

将始终返回true,因为它只是一个赋值

答案 2 :(得分:0)

你已经忘记了&#39;&#39;标记包含id并检查您的查询是否执行以及是否有任何结果使用此

 row = mysql_fetch_row($result);
 if(!(is_empty($row)){
        $query2=mysql_query("DELETE FROM incidenten WHERE incidentID='$id'");
    }

答案 3 :(得分:0)

首先是行

$result=mysql_query($query);
if($result=mysql_query($query)){
    $query2=mysql_query("DELETE FROM incidenten WHERE incidentID=$id");
}

将执行$query两次。所以,你应该省略第一行,因为if($result=mysql_query($query))就够了。

除此之外,检查$resulttrue上的false只会告诉您是否发生错误。您应该做的是使用INSERT检查mysql_affected_rows语句是否影响了任何行:

if($result=mysql_query($query)){
    if(mysql_affected_rows($connect_mysql) > 0) {
        if($result2=mysql_query("DELETE FROM incidenten WHERE incidentID='".mysql_real_escape_string($id)."'") {
            /* The query did not return errors */
        }
        else { /* add error handling here */ }
    }
}
else { /* add error handling here */ }

请注意:

  • 我将$query2重命名为$result2,因为该变量不包含查询,但查询结果
  • 由于以下两个原因,您的代码非常不安全:
    • 您将$_GET参数放入查询中而不转义它。这使SQL Injection变得尽可能简单!我添加mysql_real_escape_string函数是一种很容易避免SQL注入的简单方法。您也应该在INSERT语句中添加此函数。
    • 您使用mysql_*功能。这些已弃用,不应再使用。见here。使用mysqli函数或PDO istead。