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 更改studentname,这很奇怪。例如,此语句将尝试为每个特定年龄的学生分配相同的名称......

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中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP比较运算符在MySQL条纹查询中不起作用

OR运算符在mysql php中不起作用[重复]

“php artisan serve”命令在 Laravel 的命令行中不起作用?

逗号分隔值在 PHP MYSQL 中不起作用 [重复]

更新查询在 codeigniter 中不起作用

自定义HTML / PHP / Mysql表单在Joomla中不起作用