在 select 中使用带通配符的字符串
string with wildcards using in select
我在使用 zend-select,
时遇到一些语法问题
我从搜索表单中获取字段和值,我使用的是这样的数组(这里的所有内容都来自我的模型):
因为数组参数(vorname 和 nachname(要求为整数))是字符串类型,我想在我的 select 中使用通配符,如果字段 vorname or/and nachname由用户填写
我试过这个来学习如何正确地写它,效果很好:
$select->where(['nachname LIKE ?'=>'%idt%']);
$select->where(['vorname LIKE ?'=>'%tan%']);
为了在我的 select 中正确使用字符串,我使用这个非常不舒服,除了出现错误之外,代码:
foreach ($suche as $key=>$val) {
if (($key=="vorname") && (strlen($suche['vorname'])>0)){
$kritvn = "['" . $key . " LIKE " . chr(63) . " => '%" . $val . "%']";
}
if (($key=='nachname') && (strlen($suche['nachname'])>0)){
$kritnn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
}
}
在第一个中,我玩弄了一下“?”的语法,如果我使用下一个,我会得到以下错误;
$kritvn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
for the right syntax to use near '['vorname LIKE '=>'%%tan%%'])
我尝试使用 chr() 函数,之前使用 \?,“%”也会出现同样的问题。
所以最后我确实有两个问题:
达到结果的正确技术是什么?
如果没有更好的解决方案,我想不到,那我应该怎么写才好呢?
如果 $key = 'vorname' 并且值可能是棕褐色,我会很感激一个看起来像这样的 where 条件:
$select->where(['vorname LIKE ?'=>'%tan%']);
也许还有更好的方法,问题出现是因为现在我想要通配符 ;-)
使用 select->where()
时可以发送的数组 Zend 会将其转换为带有等于
的 where 语句
例如
$select->where(['vorname LIKE ?'=>'%tan%']);
成为
WHERE `vorname LIKE ?` = "%tan%"
像这样使用 where 对象方法一样使用它
$where = new \Zend\Db\Sql\Where();
$where->like("vorname", "%tan%");
$select->where($where);
或者您可以使用这样的排序器版本,其中 Zend 会为您创建 where 对象。
$select->where->like("vorname", "%tan%");
我在使用 zend-select,
时遇到一些语法问题我从搜索表单中获取字段和值,我使用的是这样的数组(这里的所有内容都来自我的模型):
因为数组参数(vorname 和 nachname(要求为整数))是字符串类型,我想在我的 select 中使用通配符,如果字段 vorname or/and nachname由用户填写
我试过这个来学习如何正确地写它,效果很好:
$select->where(['nachname LIKE ?'=>'%idt%']);
$select->where(['vorname LIKE ?'=>'%tan%']);
为了在我的 select 中正确使用字符串,我使用这个非常不舒服,除了出现错误之外,代码:
foreach ($suche as $key=>$val) {
if (($key=="vorname") && (strlen($suche['vorname'])>0)){
$kritvn = "['" . $key . " LIKE " . chr(63) . " => '%" . $val . "%']";
}
if (($key=='nachname') && (strlen($suche['nachname'])>0)){
$kritnn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
}
}
在第一个中,我玩弄了一下“?”的语法,如果我使用下一个,我会得到以下错误;
$kritvn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
for the right syntax to use near '['vorname LIKE '=>'%%tan%%'])
我尝试使用 chr() 函数,之前使用 \?,“%”也会出现同样的问题。
所以最后我确实有两个问题:
达到结果的正确技术是什么?
如果没有更好的解决方案,我想不到,那我应该怎么写才好呢?
如果 $key = 'vorname' 并且值可能是棕褐色,我会很感激一个看起来像这样的 where 条件:
$select->where(['vorname LIKE ?'=>'%tan%']);
也许还有更好的方法,问题出现是因为现在我想要通配符 ;-)
使用 select->where()
时可以发送的数组 Zend 会将其转换为带有等于
例如
$select->where(['vorname LIKE ?'=>'%tan%']);
成为
WHERE `vorname LIKE ?` = "%tan%"
像这样使用 where 对象方法一样使用它
$where = new \Zend\Db\Sql\Where();
$where->like("vorname", "%tan%");
$select->where($where);
或者您可以使用这样的排序器版本,其中 Zend 会为您创建 where 对象。
$select->where->like("vorname", "%tan%");