【问题标题】:PHP PDO updating table [duplicate]PHP PDO更新表[重复]
【发布时间】:2018-01-27 01:49:30
【问题描述】:

所以我在学习 Udemy 课程,然后导师做了这个功能

public function update($table, $user_id, $fields = array()){

  $columns = '';
  $i       = 1;

  foreach($fields as $name => $value){

    $columns .= "'{$name}' = :{$name}";
    if($i < count($fields)){
        $columns .= ', ';
    }
    $i++;
  }

  $sql = "UPDATE {$table} SET {$columns} WHERE 'user_id' = {$user_id}";
  if($stmt = $this->pdo->prepare($sql)){
    foreach($fields as $key => $value){
        $stmt->bindValue(':'.$key, $value);
    }
    $stmt->execute();
  }

}

我在他之后写了很多次,但它似乎从来没有工作过,有人能解释一下代码有什么问题吗?

【问题讨论】:

  • 不工作是什么意思?
  • 它永远不会更新任何东西。
  • 你为什么对我们大喊大叫?
  • 执行this 并使用错误更新您的问题
  • ' != `' 应该是反引号

标签: php oop pdo


【解决方案1】:

这里

$sql = "UPDATE {$table} SET {$columns} WHERE 'user_id' = {$user_id}";

表名周围的' 应该是反引号,而不是单引号:

$sql = "UPDATE {$table} SET {$columns} WHERE `user_id` = {$user_id}";

这里也一样:

$columns .= "`{$name}` = :{$name}";

【讨论】:

  • 下次收到@Mehdi Bounya 指出的错误消息!
  • 当然,你能告诉我你觉得这个功能怎么样?这是最好的方法吗?还是有更好的办法?
  • 如果您不传递填充的字段数组,它将失败。你需要先检查一下。还要检查错误并返回真或假,或受影响的行数。
【解决方案2】:

你应该用反引号替换单引号:

$columns .= "`{$name}` = :{$name}";

$sql = "UPDATE {$table} SET {$columns} WHERE `user_id` = {$user_id}";

只是一个建议:您可以使用数组来构建columns 子句,您可以直接execute 而无需任何bindValue,只需传递$fields 数组即可:

function update($table, $user_id, $fields = array()) {

    $columns = [];

    foreach ($fields as $name => $value) {
        $columns[] = "`{$name}` = :{$name}";
    }

    $sql = sprintf('UPDATE %s SET %s WHERE `user_id` = %s'
            , $table
            , implode(', ', $columns)
            , $user_id
    );

    if ($stmt = $this->pdo->prepare($sql)) {
        $stmt->execute($fields);
    }
}

【讨论】:

  • 哇,谢谢,我真的很困惑,我真的不知道什么时候使用这个 bindParma() 和 bindValue() 函数,什么时候我只是在执行函数中绑定它
  • @A.Maher 欢迎您。最好查看this example 以发现不同之处。 bindParambindValue 一劳永逸;-)
  • @A.Maher 并应用this answer 中的错误处理。祝你好运。
猜你喜欢
  • 2019-05-26
  • 2020-03-23
  • 2017-03-19
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 2014-02-15
  • 2014-01-07
相关资源
最近更新 更多