我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的?
感谢
答案 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。