这个SQL子句工作正常:
SELECT * FROM `sf_guard_user` WHERE nombre_apellidos LIKE REPLACE('Mar Sanz',' ','%')
现在我正在尝试为Doctrine编写此查询。我试过这个:
$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%")',
$query->getRootAlias(), $fieldName),
'Mar Sanz'));
但是我收到了这个错误:
Warning: sprintf() [function.sprintf]: Too few arguments
有什么想法吗?
此致
哈维
答案 0 :(得分:3)
'%'必须加倍('%%'),表示您发送到sprintf
或printf
的模式字符串内的文字%:
$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%%")',
$query->getRootAlias(), $fieldName),
'Mar Sanz'));
建议:为什么不在代码中运行字符串替换函数,然后再将其发送到数据库服务器?
$query->andWhere(
sprintf(
'%s.%s LIKE ?',
$query->getRootAlias(),
$fieldName
),
preg_replace('/ /', '%', 'Mar Sanz')
);