使用PDO Php删除行

时间:2015-05-05 10:01:39

标签: php pdo

我正在尝试使用PDO删除一行,但无法删除该行,而且我明显错误地理解了这一点。

这是允许我删除行的链接:

<a class="deleteMember" href="actions/delete.php?doc_id="'.$docs['doc_id'].'"><i class="fa fa-times"></i></a></span>

因此它应该将该行中的doc_id传递给下面的delete.php文件:

 <?php

    $hostname='localhost';
    $username='******';
    $password='*****';

    try {

$dbh = new PDO("mysql:host=$hostname;dbname=dashboardr",$username,$password);

$sql = "DELETE FROM `doc_list` WHERE doc_id != :id_to_delete";

$query = $db->prepare( $sql );

$query->execute(array(":doc_id" => $doc_id));

?>

但是一旦被执行,我就面临着白屏。

So doc_id is defined from here:

try {

$doc_id = $_GET['doc_id'];

$dbh = new PDO("mysql:host=$hostname;dbname=dashboardr",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
$sql = "DELETE FROM `doc_list` WHERE doc_id != :id_to_delete";

$query->bindParam(':id_to_delete', $doc_id, PDO::PARAM_INT);
$query->execute();



if ($query) {
    header ('Location: ../docList.php');
}
else{
}

$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}

这是docList.php文件

<?php include 'header.php'; ?>



<?php 

require_once '../../db_con.php'; 

try{
    // Selecting entire row from doc_list table
    $results = $db->query("SELECT * FROM doc_list ORDER BY doc_updated DESC");

}catch(Exception $e) {
    echo $e->getMessage();
    die();
}

$docs = $results->fetchAll(PDO::FETCH_ASSOC);

?>



<div class="container">

<br>

<h3 class="subTitle"><i class="fa fa-file-text"></i></span> Document List
    <a href="newDoc.php"><span class="addNew" title="Add New Document"><i class="fa fa-file"></i></span></a>
    <a href="newEmployee.php"><span class="addNew" title="Add New Category"><i class="fa fa-tag"></i></span></a>
</h3>  



    <span class="trow">
        <span class="tableHeadersLarge">Doc Title</span>
        <span class="tableHeadersMed">Created Date</span>
        <span class="tableHeadersMed">Last Updated</span>
        <span class="tableHeadersSmall"></span>
    </span>



<?php

    foreach($docs as $docs){
        echo
        '<span class="trow">
            <span class="tableHeadersLarge"><a href="docEdit.php?doc_id='.$docs["doc_id"].'">'.$docs["doc_title"]. '</a></span>
            <span class="tableHeadersMed date">'.$docs["doc_created"].'</span>
            <span class="tableHeadersMed date">'.$docs["doc_updated"].'</span>
            <span class="tableHeadersSmall">
            <a class="editMember" href="docEdit.php?doc_id='.$docs["doc_id"].'"><i class="fa fa-cogs"></i></a>
            <a class="deleteMember" href="actions/delete.php?doc_id='.$docs["doc_id"].'"><i class="fa fa-times"></i></a></span>
        </span>';
    }
?>



</div>

2 个答案:

答案 0 :(得分:3)

除了在查询:id_to_delete:doc_id中使用错误的占位符:

我们不知道$doc_id在哪里或如何被分配,因此我盲目地说你需要像这样分配:

$doc_id = $_GET['doc_id'];

actions/delete.php?doc_id这是一个GET方法,因此您需要使用我刚才所包含的内容。

$sql = "DELETE FROM `doc_list` WHERE doc_id != :id_to_delete";
$doc_id = $_GET['doc_id'];
// rest of your code

<强>旁注:

WHERE doc_id != :id_to_delete表示不等于。你确定你没有意思WHERE doc_id = :id_to_delete吗?如等于该ID

您还有一个拼写错误:

$query = $db->prepare( $sql );

应该是$dbh而不是$db

根据您的联系:

$dbh = new PDO...

同时确保您在任何地方使用相同的变量。

  

&#34;但是一旦被执行,我就会遇到白屏。&#34;

这意味着你在某处有语法错误。

使用错误报告和例外。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

修改

而不是:

$query->execute(array(":doc_id" => $doc_id));

尝试:

$query->bindParam(':id_to_delete', $doc_id, PDO::PARAM_INT);
$query->execute();

如果该列确实是int

编辑#2:(最后努力)

delete.php

确保您的doc_id列属于int类型,并且您确实选择了正确的数据库。 dashboardr最后r似乎有问题。

<?php

    $hostname='localhost';
    $username='******';
    $password='*****';

    try {

$dbh = new PDO("mysql:host=$hostname;dbname=dashboardr",$username,$password);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_GET['doc_id'])){
$doc_id = $_GET['doc_id'];
}

$sql = "DELETE FROM `doc_list` WHERE doc_id = :id_to_delete";


$query->bindParam(':id_to_delete', $doc_id, PDO::PARAM_INT);
$query->execute();

}

catch(PDOException $e)
{
echo $e->getMessage();
}

?>

答案 1 :(得分:1)

代码中的错误

'0'-'9'

应该是

$query->execute( array( ":id_to_delete" => $doc_id ) );