MySQL删除数据时触发PDOException[22007]错误求助
问题描述
我已查阅所有同类问题但未找到解决方案。除删除功能外,编辑、插入新用户等功能均正常,但点击删除时出现错误:
PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value:
展示数据库用户列表的代码
for($i = 0;$i<count($users);$i++){ echo '<tr class = "data-row">' ; echo '<td class="data-left-side">' . $users[$i]["id"] . '</td>' ; echo '<td class="data-pet-name">' . $users[$i]["nameSurname"] . '</td>' ; echo '<td class="data-user-name">' . $users[$i]["petName"] . '</td>' ; echo '<td class="action-right-side">' ; echo '<a class="delete-btn" href="?delete=' . $users[$i]["id"] .' title="Delete"><i class="fa-solid fa-trash-can fa-xl"></i></a>'; echo ' <a class="edit-btn" href="edit.php?id=' . $users[$i]["id"] . ' title="Edit"><i class="fa-solid fa-pen fa-xl"></i></i></a>' ; echo '</td>' ; echo '</tr>' ; } ?>
删除数据库行的PHP代码
if ( isset($_GET["delete"])) { $id = $_GET["delete"] ; $user = getUser($id) ; try { $stmt = $db->prepare("DELETE FROM users where id = ? ") ; $stmt->execute([$id]) ; $msg = "{$user["nameSurname"]} Silindi" ; header("Location: index.php") ; } catch(PDOException $ex) { $ex->getMessage(); echo $ex ; } }
解决方案
问题出在删除按钮的URL拼接错误:生成delete链接时,$users[$i]["id"]后面漏掉了闭合的双引号,导致title="Delete"的内容被错误拼接到delete参数的值里。
比如原本应该生成?delete=123" title="Delete",实际变成?delete=123 title="Delete",此时$_GET["delete"]拿到的不是纯数字ID,而是类似123 title="Delete"的字符串。当这个非纯数字值传入SQL语句时,数据库尝试将其转换为数值类型,就触发了Truncated incorrect DOUBLE value错误。
修复后的关键代码
修正删除按钮的链接拼接(补上缺失的双引号):
echo '<a class="delete-btn" href="?delete=' . $users[$i]["id"] . '" title="Delete"><i class="fa-solid fa-trash-can fa-xl"></i></a>';
同时注意编辑按钮也存在相同的引号缺失问题,还多了一个冗余的</i>标签,建议一并修复:
echo ' <a class="edit-btn" href="edit.php?id=' . $users[$i]["id"] . '" title="Edit"><i class="fa-solid fa-pen fa-xl"></i></a>' ;
修复后,delete参数能获取到正确的纯数字ID,SQL删除操作即可正常执行。
内容的提问来源于stack exchange,提问作者Onr
相关产品推荐
相关产品推荐

