我正在做一个项目,我根据多个过滤器显示记录。我现在正在做的是创建一个包含所有条件的$where
变量。例如
$whereP .= ' and purpose="buy"';
$whereP .= ' and type="sale"';
同样,对于其他属性,然后我替换了第一个and
。问题是我有分页,由于 url 中的单双引号问题,我无法在参数中发送$where
。所以我想要的解决方案是,我做了两个不同的变量 $where
和 $whereP
.
$whereP .= and purpose=buy;
$whereP .= and type=sale;
现在,当我从 url 获取$whereP
时,我想为属性值添加双引号,例如。
$where = purpose="buy" and type="sale"
为此,我用="
替换=
,以便将"
放在每个属性的前面,但是我如何在每个属性值之后添加"
?
现在我越来越$whereP = purpose="buy and type="sale
我需要$whereP = purpose="buy" and type="sale"
谢谢
你应该接受 Arun Killu 评论中的建议,停止以这种方式构建查询,但如果你想保持原样,你可以这样使用preg_replace(假设尾随空格是一个足够好的分隔符):
$string = preg_replace ( '/=(.*)'s/i' , '="$1" ' , $string );
我有一个更好的方案。
创建查询字符串,例如...
?where[purpose]=buy&where[type]=sale
你会得到一个类似 -
Array
(
[where] => Array
(
[purpose] => buy
[type] => sale
)
)
现在,使用此数组创建SQL
将变得更加容易。
试试这个对不起上面的答案它肯定会起作用
$variable="ad";
$whereP="";
$whereP .= ' and purpose="'.$variable.'"';
echo $whereP;
从字面上看,但如前所述,有更好的方法可以做到这一点,我使用 Zend Framework。http://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html
$where = preg_replace('/=('w+)/', '="$1"', $whereP);