Javascript 正在尝试删除表中的条目。查询不';t删除行,不知道如何调试
我正在尝试使用下面的代码删除数据库中的一个条目。javascript函数使用正确的“adventureID”将我带到Javascript 正在尝试删除表中的条目。查询不';t删除行,不知道如何调试,javascript,php,mysql,pdo,Javascript,Php,Mysql,Pdo,我正在尝试使用下面的代码删除数据库中的一个条目。javascript函数使用正确的“adventureID”将我带到index.php?delpost=,但当我检查数据库时,该行仍然存在。我最近开始使用PDO,所以我想知道execute()语句是否是问题所在$dbh连接到页面顶部的数据库,它在打印我试图从中删除行的表中的每一行时工作。我的目标是在调用javascript函数时成功删除一行。问题是——事实并非如此 <script language="JavaScript" type="tex
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();
}
?>
函数delpost(冒险家ID,标题)
{
如果(确认(“是否确实要删除“+”标题+“+”“+”“+”冒险家ID+”))
{
window.location.href='index.php?delpost='+冒险家ID;
}
}
您可能正面临启用MYSQL安全更新的问题。为了避免这种情况并最终删除行,您可以采用以下策略:
SET SQL_SAFE_UPDATES = 0;
--- YOUR DELETE STATEMENT ---
SET SQL_SAFE_UPDATES = 1;
要检查是否启用了SQL\u SAFE\u更新
,可以通过运行:
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”函数中传递变量
这里可以找到完整的示例:当您运行命令时,mysql会说什么?如果我在phpMyAdmin中运行命令,它会删除该行,它会返回到php中什么?移动
在If(isset($\u GET['delpost'])之前尝试{
好吧,只需注释掉重定向…您有没有收到任何错误?请尽量更明确。我没有收到任何错误。它只是不起作用。我不知道如何将错误(如果出现)打印到屏幕上。您有任何日志文件?服务器日志文件?您有“打开”中的“显示错误”吗?我不知道。基本上没有。设置ini(在PHP文件顶部显示“显示错误”、“打开”),然后重试。