我正试图使用下面的代码删除数据库中的一个条目。javascript函数会将我带到具有正确"adventureID"的index.php?delpost=
,但当我检查数据库时,该行仍然存在。我最近才开始使用PDO,所以我想知道execute()
语句是否是问题所在$dbh在页面顶部连接到我的数据库,它正在打印我试图从中删除行的表中的每一行。我的目标是在调用javascript函数时成功删除一行。问题是——事实并非如此。
<script language="JavaScript" type="text/javascript">
function delpost(adventureID, title)
{
if (confirm("Are you sure you want to delete '" + title + "'" + " '" + adventureID + "'"))
{
window.location.href = 'index.php?delpost=' + adventureID;
}
}
</script>
<?php
if(isset($_GET['delpost'])){
$stmt = $dbh->prepare("DELETE FROM adventure WHERE adventureID = :adventureID");
$stmt->execute(array(':adventureID' => $_GET['delpost']));
header('Location: index.php?action=deleted');
exit;
}
?>
<?php
if(isset($_GET['action'])){
echo '<h3>Post '.$_GET['action'].'.</h3>';
}
try {
foreach($dbh->query("SELECT adventureID, title, postDate FROM adventure ORDER BY adventureID DESC") as $row) {
echo '<tr>';
echo '<td>'.$row['title'].'</td>';
echo '<td>'.date('jS M Y', strtotime($row['postDate'])).'</td>';
?>
<td>
<a href="javascript:delpost('<?php echo $row['adventureID'] ?>','<?php echo $row['title'] ?>')">Delete</a>
</td>
<?php
echo '</tr>';
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
您可能正面临MYSQL安全更新打开的问题。为了避免这种情况并最终删除行,您可以采用以下策略:
SET SQL_SAFE_UPDATES = 0;
--- YOUR DELETE STATEMENT ---
SET SQL_SAFE_UPDATES = 1;
要检查您是否启用了SQL_SAFE_UPDATES
,可以运行以下操作:
SHOW VARIABLES LIKE 'sql_safe_updates'
尝试替换此代码:
$stmt = $dbh->prepare("DELETE FROM adventure WHERE adventureID = :adventureID");
$stmt->execute(array(':adventureID' => $_GET['delpost']));
通过以下方式:
$stmt = $dbh->prepare("DELETE FROM adventure WHERE adventureID = :adventureID");
$stmt->bindParam('adventureID', $_GET['delpost']);
$stmt->execute();
说明:
- 您可以:在查询中使用":variable",然后通过使用"bindParam"函数绑定变量来传递变量
- 或者:在查询中使用"?",然后在"execute"函数中传递变量
完整示例可在此处找到:http://php.net/manual/fr/pdostatement.execute.php#example-1050