我正在尝试使用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>
答案 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 ) );