使用单个mysqli语句查询更新mysql数据库表字段

时间:2013-10-28 23:21:43

标签: php mysqli

我有一个数据库表,我正在以这种方式更新表列。

    $mysqli = new mysqli('localhost', 'root', '', 'db');

        if (mysqli_connect_errno()) {
            echo 'failed to connect to db.. <br>' . mysqli_connect_errno();
            return 'error';
        }

   $username = $data['username'];
   $data['image'] = $this->replace_whitespace($data['image']);

   foreach($data as $key=>$value){

       $this->query = "UPDATE users SET $key=? WHERE username='$username'";
       $this->statement = $mysqli->prepare($this->query);

       if($this->statement){

           $this->statement->bind_param('s', $value);
           $this->statement->execute();
           $this->statement->close();
       }

   }

是否可以一次更新多个表列。我试过这个但是徒劳无功。

   $this->query = "UPDATE users SET col1=?, col2=?, col3=? WHERE username='$username'";
   $this->statement = $mysqli->prepare($this->query);

   if($this->statement){

       $this->statement->bind_param('sss', $value1, $value2, $value3);
       $this->statement->execute();
       $this->statement->close();
   }

有更好的方法吗?

        $mysqli = new mysqli('localhost', 'root', '', 'db');

        if (mysqli_connect_errno()) {
            echo 'failed to connect to db.. <br>' . mysqli_connect_errno();
            return 'error';
        }
        $username = $data['username'];
        $this->query = "UPDATE users SET fname=?, lname=?, email=?, tpin=?, image=?, address=? country=?, city=?, state=?, postal=? WHERE username='$username'";
        $this->statement = $mysqli->prepare($this->query);

        if ($this->statement) {
            $this->statement->bind_param('ssssssssss', $data['fname'],$data['lname'],$data['email'],$data['tpin'], $data['file'], $data['address'],$data['country'],$data['city'],$data['state'], $data['post_code']);
            $this->statement->execute();
             $this->statement->close();
       }

这是我的真实代码。

4 个答案:

答案 0 :(得分:3)

在col3 =?

之后删除“,”

这将修复语法错误

答案 1 :(得分:1)

 $this->query = "UPDATE users SET col1=?, col2=?, col3=?, WHERE username='$username'";

你有一个额外的逗号,这意味着你的SQL正在读取“WHERE”作为另一列,一切都搞砸了。

 $this->query = "UPDATE users SET col1=?, col2=?, col3=? WHERE username='$username'";

应该可以正常工作。

在回答下面的评论时,这是正确的方法,所以它必须是某个错误的变量,你得到什么错误信息? (如果有的话)

也可能是您绑定的参数之一不是字符串。无论如何,我们需要一个更深入的例子。

答案 2 :(得分:0)

我认为它的工作方式与将新值放入数据库的方式相同。

Update a row mysql in php

答案 3 :(得分:0)

  

是否可以一次更新多个表列

是。实际上,在一个查询中更新许多字段是任何DBMS的核心功能。您始终可以期望它得到支持。

  

我试过这个但是徒劳无功。

嗯,你必须尝试更多,就像我们所做的一样。毕竟,这是你的工作。

关于“真实”代码的两个注释:

  1. 您必须在查询中绑定所有变量,而不仅仅是其中一些
  2. 您必须配置mysqli以报告错误:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);