Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 类似SQLbuilder的参数,带%_Mysql_Sql_Query Builder_Doctrine Query - Fatal编程技术网

Mysql 类似SQLbuilder的参数,带%

Mysql 类似SQLbuilder的参数,带%,mysql,sql,query-builder,doctrine-query,Mysql,Sql,Query Builder,Doctrine Query,我正试图用像一样搜索我的数据库,现在builder工作得很好,除了一件事: 我希望在每个参数的前面和后面都有一个%,但按照构建器的工作方式,在执行每个参数时,它会在每个参数的前面和后面放置一个'。所以我不能手动添加它们 有办法做到这一点吗 以下是查询: $queryBuilder = $this->db->createQueryBuilder(); $queryBuilder ->select('t.id', 't.status', 't.title', 't.pric

我正试图用
一样搜索我的数据库,现在builder工作得很好,除了一件事:
我希望在每个参数的前面和后面都有一个
%
,但按照构建器的工作方式,在执行每个参数时,它会在每个参数的前面和后面放置一个
'
。所以我不能手动添加它们

有办法做到这一点吗

以下是查询:

$queryBuilder = $this->db->createQueryBuilder();
$queryBuilder
    ->select('t.id', 't.status', 't.title', 't.price', 'u.username')
    ->from('tools', 't')
    ->innerJoin('t', 'key_for_tools', 'kft', 'kft.tools_id = t.id')
    ->innerJoin('t', 'keywords', 'k', 'kft.key_id = k.id')
    ->innerJoin('t', 'users', 'u', 't.user_id = u.id');

for($i=0; $i < sizeof($tags); $i++){
    $queryBuilder->andWhere('k.key LIKE %' . $queryBuilder->createPositionalParameter($tags[$i]) . '%');
}
$result = $this->db->fetchAll($queryBuilder->getSql(),$tags);
$queryBuilder=$this->db->createQueryBuilder();
$queryBuilder
->选择('t.id','t.status','t.title','t.price','u.username')
->from('tools','t')
->innerJoin('t'、'key_for_tools'、'kft'、'kft.tools_id=t.id')
->innerJoin('t','keywords','k','kft.key\u id=k.id')
->innerJoin('t','users','u','t.user_id=u.id');
对于($i=0;$iandWhere('k.key LIKE%'。$queryBuilder->CreatePositionParameter($tags[$i])。%');
}
$result=$this->db->fetchAll($queryBuilder->getSql(),$tags);
但这会生成如下字符串:

选择t.id、t.status、t.title、t.price、u.username FROM tools t internal JOIN key\u用于kft.tools上的kft工具kft\u id=t.id internal JOIN关键字k ON kft.key\u id=k.id internal JOIN users u ON t.user\u id=u.id其中(k.key LIKE%'标记“%)
但我想要
%
之间的


如果有人知道怎么做,就像@VMAI所说的,这就解决了我的问题

    for($i=0; $i < sizeof($tags); $i++){
        $queryBuilder->andWhere($queryBuilder->expr()->like('k.key', $queryBuilder->expr()->literal('%' . $tags[$i] . '%')));
    }
for($i=0;$iandWhere($queryBuilder->expr()->like('k.key',$queryBuilder->expr()->literal('%'.$tags[$i].%'));
}

直接将其添加到参数中,如下所示:

$queryBuilder->andWhere('k.key LIKE ' . $queryBuilder->createPositionalParameter('%' . tags[$i] . '%'));
所有应该在qoutes之间的“东西”都必须添加到qoutes中

应该对您有所帮助