在 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%");