PHP提交表单时如何修改数据库表最后一行数据而非新增行?
问题原因
你现有代码使用INSERT语句,该语句的作用就是向数据表插入新行,自然不会修改已有数据,要实现更新最后一行的需求需要改用UPDATE语句。
修复后的代码
<?php if (!empty($contact)){ if (!empty($password)){ $host = "localhost"; $dbusername = "root"; $dbpassword = ""; $dbname = "student"; // 创建连接 $conn = new mysqli($host, $dbusername, $dbpassword, $dbname); if (mysqli_connect_error()){ die('连接错误 ('. mysqli_connect_errno() .') ' . mysqli_connect_error()); } // 使用预处理语句避免SQL注入,更新id最大的最后一行 $sql = "UPDATE student_table2 SET contact = ? WHERE id = (SELECT max_id FROM (SELECT MAX(id) AS max_id FROM student_table2) AS temp)"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $contact); if ($stmt->execute()){ header("Location: http://localhost/imgtxt/add/add.html"); exit(); } else { echo "错误: ". $sql . "<br>" . $conn->error; } $stmt->close(); $conn->close(); } else { echo "密码不能为空"; die(); } } else { echo "contact字段不能为空"; die(); } ?>
改动说明
- 把原来的
INSERT插入语句替换为UPDATE更新语句,通过子查询SELECT MAX(id) FROM student_table2获取表中最后一行的id进行匹配 - 改用预处理语句绑定参数,修复了原代码直接拼接SQL字符串导致的SQL注入安全漏洞
- 如果你确定只需要固定更新id为3的行,把WHERE条件改成
WHERE id = 3即可
内容的提问来源于stack exchange,提问作者YASSIN.049
相关产品推荐
相关产品推荐

