具有现有价值的PDO更新表?

时间:2014-04-22 23:40:59

标签: php mysql pdo

我2年前构建了PHP,现在我想将所有关于数据库的内容更改为PDO,我对更新表有一些问题。我用这个函数来更新表。

public function update($tabel, $fild = null ,$where = null)
    {
         $update = 'UPDATE '.$tabel.' SET ';
         $set=null; $value=null;
         foreach($fild as $key => $values)
         {
             $set .= ', '.$key. ' = :'.$key;
             $value .= ', ":'.$key.'":"'.$values.'"';
         }
         $update .= substr(trim($set),1);
         $json = '{'.substr($value,1).'}';
         $param = json_decode($json,true);

         if($where != null)
         {
            $update .= ' WHERE '.$where;
         }

         $query = parent::prepare($update);
         $query->execute($param);
         $rowcount = $query->rowCount();
         return $rowcount;
    }

使用此

一切正常
$updatefild = array('count' => 20);
$where = "id = '123'"; 

echo $db->update("mytable",$updatefild, $where);

但是当我想用现有行更新行时遇到问题,mysql_query我通常使用

mysql_query("update mytable set count=count+1 where id='123'");

我是如何实现PDO的?

感谢

1 个答案:

答案 0 :(得分:1)

首先,为什么只使用JSON将其解码为数组?这令人困惑。

其次,如果您尝试向现有字段添加数字,则甚至不需要prepare()。

你可以做到

PDO->query("update mytable set count=count+".intval($int)." where id='123'");

如果你正在做准备,你可以这样做:

$stmt = PDO->prepare("update mytable set count=count+:count where id='123'");
$stmt->execute(array(':count' => 1));

$stmt = PDO->prepare("update mytable set count=count+? where id='123'");
$stmt->execute(array(1));

编辑:由于无法绑定列名,因此无法对函数的编写方式进行编辑。 PDO会将其作为标准字符串引用。你必须找到一个解决方法,可能包括字段中的= count。