循环中的pdo绑定参数

时间:2013-09-04 10:50:37

标签: mysql pdo

我有以下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'

1 个答案:

答案 0 :(得分:1)

虽然没有阅读整个问题,但引起了我的注意

  数据库中lat,lon和city的列都填充了“munich”。

引自PDO tag wiki

  

如果您不知道是否需要bindValue()或bindParam(),请转到前者。 bindValue()不那么模糊,副作用较小。

很可能是一个原因。