我有以下sql语句:
$sql = "UPDATE houses SET title=:title ";
我根据对象“location”动态编辑,它可能有几个参数(其中一些可能为null,因此它们被省略)
//are there any location parameters which need to be added to query?
if (isset($house->location)){
//go through them and add them to query
foreach ($house->location as $key=>$locationParameter) {
$sql.=','.$key.'=:'.$key;
}
//finish query
$sql.=" WHERE id=:id";
$stmt = $db->prepare($sql);
//bind all defined location parameters to query
foreach ($house->location as $key=>$locationParameter) {
$stmt->bindParam($key, $locationParameter);
}
} else {
//there are none location parameters, so prepare just the original query with title and id
$sql.=" WHERE id=:id";
$stmt = $db->prepare($sql);
}
//and finally bind the required parameters
$stmt->bindParam("title", $house->title);
$stmt->bindParam("id", $id);
$stmt->execute();
当我回显查询(echo $ sql)时,它看起来就像我想要的那样,并且所有绑定的参数都是正确的,但是当我运行查询时,所有数据库列的位置参数都只是用位置对象的最后一个值更新,例如:
$house->location->lat is 25.5
$house->location->lon is 28.755
$house->location->city is munich
使用此对象执行查询后,lat,lon和city的DB中的列都填充了“munich”。 你能告诉我,我做错了什么?
+ var_dump($ sql) - >
string 'UPDATE houses SET title=:title,lat=:lat,lon=:lon,city=:city WHERE id=:id'
答案 0 :(得分:1)
虽然没有阅读整个问题,但引起了我的注意
数据库中lat,lon和city的列都填充了“munich”。
引自PDO tag wiki:
如果您不知道是否需要bindValue()或bindParam(),请转到前者。 bindValue()不那么模糊,副作用较小。
很可能是一个原因。