【问题标题】:How to update a table using a where clause using PHP and MySQL?如何使用 PHP 和 MySQL 的 where 子句更新表?
【发布时间】:2014-12-28 09:37:23
【问题描述】:

我正在开发一个网站,该网站应该从页面上的表单传递数据并使用 PHP 更新服务器上的学生表。我现在正在尝试处理的条件是修改数据,所以它应该能够更新服务器上的数据,但它没有......

你们可以提供的任何帮助或建议将不胜感激。提前致谢。

这是我的代码:

<?php

date_default_timezone_set('America/New_York');

$connection = mysql_connect("hostaddress","DBname","password");

            // Check connection
if (!$connection)
{
            echo "Connection failed: " . mysql_connect_error();
}
            else
{
                //select table
                mysql_select_db("DBname");
                echo "Database Found! <br>";

                $query = "UPDATE students
                          SET firstName = $_POST[firstName],
                              lastName = $_POST[lastName]
                          WHERE StudentID = $_POST[StudentID]";

                $res = mysql_query($query);

                if ($res)
                {
                   echo "<p>Record Updated<p>";
                }   
                else
                {
                   echo "Problem updating record. MySQL Error: " . mysql_error();
                }
            }

            mysql_close($connection);
        ?>

我不断收到此错误:

找到数据库! 更新记录时出现问题。 MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“lastName = , WHERE Stud”附近使用正确的语法

P.S:我已经用一些数据创建了学生表。我可以使用终端和与上面相同的 mysql 查询访问该表并对其进行修改,但仍然没有运气。另外,我故意更改了代码中的主机地址、数据库名称和密码(以防万一有人问起)。

echo $query的输出

UPDATE fall14_bmora013.students SET firstName = , lastName = 
WHERE StudentID = 890

【问题讨论】:

  • 去掉“WHERE”前第二个“SET”后的逗号
  • 重要提示:您的数据库对 SQL 注入开放。请阅读How can I prevent SQL-injection in PHP?
  • 为什么有 SQL-server 标签?那是特定的 Microsoft 产品,而不是涉及 sql 的服务器。

标签: php mysql sql-update update-statement


【解决方案1】:

很明显,您的UPDATE 语句中有一个语法错误(WHERE 之前有一个额外的,),如下所示

UPDATE students SET firstName = $_POST[firstName],
lastName = $_POST[lastName], <-- remove this extra comma
WHERE StudentID = $_POST[StudentID] 

编辑:

检查您的表单元素是否真的命名为firstNamelastName?检查拼写。我怀疑这些名称与您在代码中所指的名称不同。

【讨论】:

  • 是的,这是我的疏忽。我已经在这篇文章和我的代码中更改了它,但错误仍然存​​在:无法更新数据:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'WHERE StudentID = '890'' 附近使用正确的语法
  • 试试echo $query 看看查询是如何形成的。
  • 类似的错误信息。我打印了字符串: UPDATE fall14_bmora013.students SET firstName = , lastName = WHERE StudentID = 890 我不知道为什么我看不到我正在设置的帖子值。
  • 是的,这就是问题所在。您的帖子变量 $_POST[firstName] 没有值,因此您遇到错误。你是如何设置这些变量的?
  • 更新 fall14_bmora013.students SET firstName = , lastName = WHERE StudentID = 890
【解决方案2】:

你自己写的: MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“lastName = , WHERE Stud”附近使用正确的语法

打印查询字符串,它不是您所期望的。

附: 您可能应该转义您的输入以避免 sql-injectiion。

另外,请注意您不应再使用 mysql_ 函数。 阅读下一页中的警告: http://php.net/manual/en/function.mysql-query.php

【讨论】:

  • 我之前尝试过使用 mysqli_query() 但服务器给了我一条关于 mysqli_query() 被弃用的消息。我还是新手,但我只能假设我使用的服务器需要我使用 mysql 函数。
  • 不,mysql_* 函数是deprecated,mysqli_* 函数是你应该使用的(或PDO)。
【解决方案3】:

试试这个...

$query = "更新学生 SET firstName ='".$_POST['firstName']."',lastName ='".$_POST['lastName']."' WHERE StudentID = '".$_POST['StudentID']."'";

【讨论】:

  • 不,这无关紧要。如果是这样的话,那么$_POST['StudentID'] 也会是空的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多