PHP更新表逗号错误

时间:2016-05-31 18:26:15

标签: php mysql

我正在更新phpmyadmin中的表格。我的问题基本上是:为什么我需要'$username'之后的逗号,即$query.="username = '$username' , ";不确定为什么这个逗号是必要的。

function UpdateTable()
{
    global $connection;
    $username = $_POST['username'];
    $password = $_POST['password'];
    $id = $_POST['id'];
    $query = "UPDATE users SET "; // username is the name of the column in the database, you need the space in  between
    $query.="username = '$username' , ";
    $query.= "password = '$password' ";
    $query.= "WHERE id = $id ";
    $result = mysqli_query($connection,$query);
    if(!$result)
    {
        die("Query failed". mysqli_error($connection));
    }
}

2 个答案:

答案 0 :(得分:1)

因为那是MySQL语法。检查MySQL文档:http://dev.mysql.com/doc/refman/5.7/en/update.html

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

答案 1 :(得分:0)

没有必要关注 '$user_name'

下一行的下一个作业必须前面。

就像'$password'之后的空格不是绝对必要的。

在下一行的WHERE之前,空间是必要的

将该语句视为格式如下:

 UPDATE users
    SET username = ?
      , password = ?
  WHERE id = ? 

逗号是必需的,基本上读作“也是SET”

更好的模式是在需要它的行上添加所需的空格和/或逗号。而不是记住在不需要它的行上这样做。 e.g。

$sql = "UPDATE users";
$sql.= " SET username = ?";
$sql.= ", password = ?";
$sql.= " WHERE id = ?"; 

这里没有太大区别。但是当你真正需要动态生成SQL时,这种模式就容易多了。

一些额外的想法。

NOT 在数据库中存储明文密码。改为存储哈希值。

代码似乎容易受到SQL注入攻击。

使用带有绑定占位符的预准备语句...静态SQL文本,而不是动态生成的SQL。