如何使用php删除和更新

时间:2016-02-05 11:01:51

标签: php pdo

大家好我一直在尝试使用php删除文件,我希望它删除主帖,回复等,然后在他/她的观点中更新给作者-10。

这是我的代码,使用PDO:

<?php session_start(); 
    if(isset($_POST['id'])){

        include($root . 'dbconn.php');

        $form = $_POST;
        $id = $form['id'];   
        try {

            $db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
            $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $stmt = $db_conn->prepare("DELETE FROM code WHERE cid= {$id}");
            $stmt = $db_conn->prepare("DELETE FROM comment WHERE id = {$id}");
            $stmt = $db_conn->prepare("DELETE FROM likes_map WHERE lid = {$id}");
            $stmt = $db_conn->prepare("UPDATE users SET point -1 WHERE username = {$u}");
            $stmt->bindParam(':id', $id); 
            $stmt->bindParam(':cid', $id); 
            $stmt->bindParam(':lid ', $id);
            $stmt->bindParam(':u ', $_SESSION['username']);
            $stmt->execute();
            echo "deleted"
        } catch(PDOException $e) {
            echo "Error:" . $e->getMessage();
        }
        $db_conn = null;


    }else{
        echo "You are not allow to delete this";
    }
?>

1 个答案:

答案 0 :(得分:1)

您的第一个问题是您在同一语句句柄上准备了多个查询,因此在准备下一个查询时会丢失指向该预准备语句的链接。

您也只是执行一次查询,而不是每个语句执行一次!

此外,您准备好的sql语句没有使用正确的语法设置参数

在事务中运行此代码也是一个好主意,因此如果数据库的任何更新失败,那么您只需要处理这个过程。这假设数据库是INNODB数据库而不是MYISAM数据库,因为事务不适用于MYISAM

<?php 
    session_start(); 
    if(!isset($_POST['id'])){
        echo "You are not allow to delete this";
        exit;
    }

    include($root . 'dbconn.php');

    $form = $_POST;
    $id = $form['id'];   
    try {

        $db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
        $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // start a transaction
        $db_conn->beginTransaction();

        $d_code = $db_conn->prepare("DELETE FROM code WHERE cid= :id");
        $d_code->bindParam(':id', $id); 

        $d_comment = $db_conn->prepare("DELETE FROM comment WHERE id = :id");
        $d_comment->bindParam(':id', $id); 

        $d_like = $db_conn->prepare("DELETE FROM likes_map WHERE lid = :id");
        $d_like->bindParam(':id ', $id);

        $u_user = $db_conn->prepare("UPDATE users SET point -1 WHERE username = :u");
        $u_user->bindParam(':u ', $_SESSION['username']);


        $d_code->execute();
        $d_comment->execute();
        $d_like->execute();
        $u_user->execute();

        $db_conn->commit();

        echo "deleted";

    } catch(PDOException $e) {
        $db_conn->rollBack();
        echo "Error:" . $e->getMessage();
    }
    $db_conn = null;

?>
相关问题