MySQL DELETE语句不删除行

时间:2013-04-10 22:41:05

标签: php mysql

以下代码是我从数据库中删除数据的方法。用户选择要删除的标题,然后查询应删除这些行。不幸的是,这不起作用。

我确保DELETE查询在PhpMyAdmin和MySQL Workbench中使用它,但由于某种原因,我编码的PHP代码不允许删除工作。

<?php
    session_start();
    require ("../login.php");

    if (!isset($_SESSION['user'])) 
        header('Location: ../index.php');

    include ("header.php");
    include ("subnav.php");
?>

    <h2>Current Subscriptions</h2>

    <?php

    $user_id = $_SESSION['user'];

    if (isset($_POST['submit'])) {
        foreach($_POST["titles"] as $title) {
            $stmt = $db->prepare("DELETE FROM subscriptions WHERE user=:user AND title=:title)");
            $stmt->bindValue(':user', $user_id, PDO::PARAM_INT);
            $stmt->bindValue(':title', $title, PDO::PARAM_INT);
            $stmt->execute();
        }
        echo '<p>Thank you! Your changes have been made!</p>';
    }
    else {
        $stmt = $db->prepare
            ("SELECT t.id, t.publisher, t.title
            FROM titles t
                JOIN subscriptions s
                    ON t.id = s.title
            WHERE s.user=:user
            ORDER BY t.id");

        $stmt->bindValue(':user', $user_id, PDO::PARAM_STR);
        $stmt->execute();
        $rows = $stmt->fetchAll();
        $num_rows = count($rows);
        if ($num_rows == 0)
            echo 'You are not currently subscribed to any titles.';
        else {
            ?>
            <form action="" method="post">
            <?php   
            foreach($rows as $row) 
                echo '<input type="checkbox" name="titles[]" value="' . $row['id'] . '">' . $row['publisher'] . ' - ' . $row['title'] . '<br>';
            ?>
            <input type="submit" value="Update" name ="submit" id="submit">
                </form>
        <?php
        }
    }
    ?>

<?php   
    include ("footer.php");
?>

2 个答案:

答案 0 :(得分:3)

我确实在您的SQL中看到了额外的),请尝试删除它。

 ("DELETE FROM subscriptions WHERE user=:user AND title=:title)");

答案 1 :(得分:0)

很难用你的代码判断,但尝试用

包装你的foreach
try {
    foreach(...) {
        ...
    }
} catch (PDOException $ex) {
    $ex->getMessage();
}

这应该清楚地告诉你发生了什么。