如何让PHP变量$address获取地址、城市、州、邮编四个完整字段
问题原因
- 你使用的
getById方法仅支持单条件查询,仅接收3个入参:表名、条件字段名、条件匹配值,本身不支持传入多个参数做多字段匹配 - 该方法已经使用
select *查询全表字段,只要查询命中对应记录,返回的$address对象默认包含address/city/state/PostalCode全部字段,无需额外传参获取
场景1:$task->address为locations表的主键ID
无需修改查询逻辑,直接调用对应字段输出即可,修改前端展示代码:
<div class="col-xs-6"> <p>Address (New Format):</p> </div> <div class="col-xs-6"> <?php $address =$this->commonModel->getById('locations','id',$task->address); ?> <p> <a href="javascript:;" data-type="select" data-pk="1" data-value="" data-original-title="Select Address" class="editable editable-click contactaddress" style="color: gray;"> <?php echo $address->name.' - '.$address->address.' '.$address->city.' '.$address->state.' '.$address->PostalCode; ?> </a> </p> </div>
场景2:需要用$task自带的address/city等字段匹配locations记录
需要先在commonModel中新增支持多条件查询的方法:
public function getByConditions($table, $conditions){ $whereClause = []; foreach($conditions as $field => $val){ // 此处仅做示例,生产环境建议改为参数绑定避免SQL注入 $whereClause[] = $field.' = "'.$val.'"'; } $whereStr = implode(' AND ', $whereClause); $qry =$this->db->query('select * from '.$table.' where '.$whereStr.' limit 1'); return $qry->row(); }
调用时传入所有需要匹配的条件即可:
$address = $this->commonModel->getByConditions('locations', [ 'address' => $task->address, 'city' => $task->city, 'state' => $task->state, 'PostalCode' => $task->PostalCode ]);
注意:现有
getById方法直接拼接SQL参数存在SQL注入风险,生产环境建议替换为参数绑定的预处理查询逻辑。
内容的提问来源于stack exchange,提问作者Joel Perez
相关产品推荐
相关产品推荐

