如何更新存储在mysql数据库中的数据

时间:2018-08-09 09:09:42

标签: php mysql database

我有一个网页,用户可以在其中“添加”帖子或“更新”现有帖子。在下面的代码中,我的“添加”功能可以很好地添加新帖子。但是,我的“更新”功能根本不起作用。无法更新我数据库中的现有帖子。谁能帮我我在做什么错?谢谢!!

class ShareModel extends Model{
public function Index(){
       $this->query('SELECT * FROM shares ORDER BY create_date DESC');
       $rows = $this->resultSet();
       return $rows;
}

public function add(){
    // Sanitize POST
    $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

    if($post['submit']){
        if($post['title'] == '' || $post['body'] == '' || $post['link'] ==''){
            Messages::setMsg('Please Fill In All Fields', 'error');
            return;
        }
        // Insert into MySQL
        $this->query('INSERT INTO shares (title, body, link, user_id) VALUES(:title, :body, :link, :user_id)');
        $this->bind(':title', $post['title']);
        $this->bind(':body', $post['body']);
        $this->bind(':link', $post['link']);
        $this->bind(':user_id', 1);
        $this->execute();
        // Verify
        if($this->lastInsertId()){
            // Redirect
            header('Location: '.ROOT_URL.'shares');
        }
    }
    return;
}



   public function update(){

        $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

    if($post['update']){

        if($post['title'] == '' || $post['body'] == '' || $post['link'] ==''){
            Messages::setMsg('Please Fill In All Fields', 'error');
            return;
        }



        $title = $post['title'];
        $body = $post['body'];
        $link = $post['link'];


        // Update MySQL
        $this->query('UPDATE shares SET (title, body, link, user_id) VALUES(:title, :body, :link, :user_id) ' );
        $this->bind(':title', $post['title']);
        $this->bind(':body', $post['body']);
        $this->bind(':link', $post['link']);
        $this->bind(':user_id', 1);
        $this->execute(); 

            header('Location: '.ROOT_URL.'shares');

     }
     return;
  } 



}

3 个答案:

答案 0 :(得分:2)

您的更新语法已关闭。 MySQL的更新语法(也是大多数其他数据库使用的语法)是:

UPDATE some_table
SET col1 = val1, col2 = val2, ...

换句话说,直接使用等于为每列分配一个更新值。试试这个版本:

$this->query('UPDATE shares SET title = :title, body = :body, link = :link, user_id = :user_id');

编辑:大多数时候,除非您确实打算更新表中的每条记录,否则您还会有一个带有更新的WHERE子句。

答案 1 :(得分:0)

SQL UPDATE语法:

一般语法为:

UPDATE table-name 
SET column-name = value, column-name = value, ...

要将记录数限制为 UPDATE ,请添加 WHERE 子句:

  

请注意UPDATE语法中的 WHERE 子句:WHERE子句指定应更新的记录。 如果省略WHERE子句,所有记录将被更新!

更新一个表时,MySQL UPDATE语句的完整语法为

 UPDATE table-name 
   SET column-name = value, column-name = value, ...
 WHERE condition

OR

在MySQL中使用来自另一个表的数据更新一个表时,UPDATE语句的语法为:

UPDATE table1
SET column1 = (SELECT expression1
               FROM table2
               WHERE conditions)
[WHERE conditions];

OR

更新多个表时,MySQL UPDATE语句的语法为:

UPDATE table1, table2, ... 
SET column1 = expression1,
    column2 = expression2,
    ...
WHERE table1.column = table2.column
AND conditions;
  

注意:将echo或var_dump()放入语句中,然后退出();手术结束   那里。之后,您将看到查询到浏览器,然后   复制该查询并将其放在“ SQL”部分中并执行查询   在那边。如果发现所有操作都正确,则将其删除   退出并回显,然后运行代码。希望如此解释   可能对您的理解目的很清楚。   否则,您可以使用 echo $ this-> last_query(); exit;

打印最后一个SQL查询字符串。

通过QAL 快乐编码:)

答案 2 :(得分:-1)

查询中的语法错误

 $this->query('UPDATE shares SET (title, body, link, user_id) VALUES(:title, :body, :link, :user_id) ' );

尝试这样:

 $this->query('UPDATE shares SET title=:title, body=:body, link=:link, user_id=:user_id ');