我正在为我的用户创建一个多步骤表单.他们将被允许更新任何或所有字段.所以,我需要发送值,检查它们是否已设置,如果是,则运行UPDATE.这是我到目前为止:
- public function updateUser($firstName,$lastName,$streetAddress,$city,$state,$zip,$emailAddress,$industry,$password,$public = 1,$phone1,$phone2,$website,){
- $updates = array(
- 'firstName' => $firstName,'lastName' => $lastName,'streetAddress' => $streetAddress,'city' => $city,'state' => $state,'zip' => $zip,'emailAddress' => $emailAddress,'industry' => $industry,'password' => $password,'public' => $public,'phone1' => $phone1,'phone2' => $phone2,'website' => $website,);
这是我的PDO(嗯,开始尝试)
- $sth = $this->dbh->prepare("UPDATE user SET firstName = "); //<---Stuck here
- $sth->execute();
- $result = $sth->fetchAll(PDO::FETCH_ASSOC);
- return $result;
基本上,我如何创建UPDATE语句,以便它只更新数组中非NULL的项?
我想过运行这样的foreach循环:
- foreach($updates as $key => $value) {
- if($value == NULL) {
- unset($updates[$key]);
- }
- }
但如果我不确定这些值,我该如何编写准备语句?
如果我完全错了,请指出我正确的方向.谢谢.
首先,使用
array_filter
删除所有NULL值:
- $updates = array_filter($updates,function ($value) {
- return null !== $value;
- });
其次,绑定参数,使您的生活更轻松:
- $query = 'UPDATE table SET';
- $values = array();
- foreach ($updates as $name => $value) {
- $query .= ' '.$name.' = :'.$name.','; // the :$name part is the placeholder,e.g. :zip
- $values[':'.$name] = $value; // save the placeholder
- }
- $query = substr($query,-1).';'; // remove last,and add a ;
- $sth = $this->dbh->prepare($query);
- $sth->execute($values); // bind placeholder array to the query and execute everything
- // ... do something nice :)