MySQL的更新命令在PHP中不起作用
Posted
技术标签:
【中文标题】MySQL的更新命令在PHP中不起作用【英文标题】:Update command of MySQL not working in PHP 【发布时间】:2018-10-16 14:53:35 【问题描述】:这是我的第一个非常简单的 php 学习程序,我已将我的 PHP 与 mysql 服务器连接起来,插入、删除运行良好,但更新有一些问题。当我按下更新按钮时,没有任何反应。
我的数据库名是ddb3,表名是student1。
我使用的 Apache 服务器是通过 Xampp 托管的。
mysql_error();
显示没有错误,apache 日志文件中也没有错误
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("ddb3");
if(isset($_POST['submit']))
$name = $_POST['name'];
$age = $_POST['age'];
mysql_query("INSERT INTO student1(name, age) VALUES ('$name', '$age');");
if(isset($_POST['delete']))
$name = $_POST['name'];
mysql_query("DELETE FROM student1 WHERE name = '$name';");
if(isset($_POST['update']))
$name = $_POST['name'];
$age = $_POST['age'];
mysql_query("UPDATE student1 SET name = '$name' WHERE age = '$age';");
?>
<html>
<body>
<center>
<form name='f1' action='prog3.php' method='post'>
<b>Name:<b><input type="text" name="name" size="20"><br>
<b>Age:<b><input type="text" name="age" size="5"><br>
<input type="submit" name="submit" value="Insert to Table"/>
<input type="submit" name="delete" value="Delete from Table"/>
<input type="submit" name="update" value="Update Row"/>
</form>
</center>
<?php
echo "<table align='center' name='t1' border='1' width=500px>
<tr><th>NAME</th><th>AGE</th></tr>";
$select = mysql_query("SELECT * FROM student1");
while($colmn = mysql_fetch_array($select))
echo "<tr><td>$colmn[0]</td><td>$colmn[1]</td></tr>";
echo "<table>";
?>
</body>
</html>
【问题讨论】:
停止使用已弃用的mysql_*
API。使用mysqli_*
或PDO
。还要使用准备好的语句来防止 sql 注入
使用mysql_error()
查看是否有错误或打印出语句并在sql客户端中尝试,可能值不是您期望的值
@Jens 尝试了 mysql_error();但没有发现错误。我正在使用 Xampp 服务器
【参考方案1】:
将观察到的行为描述为“不工作”或“没有发生”在确定实际问题时提供的有用信息非常少。
(您如何确定“没有发生”或“没有工作”?)
我建议在代码的特定点添加一些调试输出(例如,echo 或 var_dump),以确定代码中的哪个路径。 ($_POST['update']
设置了吗?if
条件评估为 TRUE 吗?)
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
我会注意到,我们会根据age
更改student
的name
,这很奇怪。例如,此语句将尝试为每个特定年龄的学生分配相同的名称......
UPDATE student1
SET name = 'Ted'
WHERE age = '19'
这样做会很奇怪。 SQL 有效。奇怪的是 哪些 行正在更改(所有行的 age=19),以及正在应用的更改(将所有行的名称更改为相同的值。)
学生的名字是 Jack 还是 Jill 或其他任何名字都没有关系。 表格中年龄值为 19 的每一行都会发生变化。
我们通常不会将“年龄”存储为列,而是存储出生日期 (dob)。 DOB 不会改变。但是年龄会发生变化;年龄是 DOB 与当前(或某些指定的“截至”)日期之间的差异。年龄?年龄是几个月还是几天?
如果我们坚持存储年龄,那么age
列很可能会更改为 name 列。
要确定应该更新哪个行...name
是唯一的吗?是否可以有两行或多行具有相同的name
?
我们可能想要学生的一些唯一标识符,并在 UPDATE 语句中使用它。
UPDATE student1 s
SET s.some_col = 'new_value'
WHERE s.id = 'unique_identifier'
不要不要使用已弃用的 mysql_ 接口进行新开发。使用 PDO。 (或使用 mysqli_)。
还可以使用带有绑定占位符的预处理语句来缓解 SQL 注入漏洞。如果由于某种深不可测的原因我们不能这样做,那么至少,任何包含在 SQL 文本中的潜在不安全值必须正确转义。
小鲍比桌https://xkcd.com/327/
OWASP 项目 SQL 注入 https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
【讨论】:
以上是关于MySQL的更新命令在PHP中不起作用的主要内容,如果未能解决你的问题,请参考以下文章