
SELECT
`id`,
`name`,
`email`,
`type`
FROM
`customers`
WHERE
( 'name,email' ) IN ( '(\'客户姓名二\',\'44445@163.com\'),(\'客户姓名\',\'44445@163.com\')' )
ORDER BY
`id` DESC
SELECT * FROM `customers` WHERE ( NAME, email ) IN (( '123', '123@outlook.com' ),
( '我是客户姓名33', '1303842899@qq.com' ))
![参考:在 Laravel 9 中使用原生表达查询时,报错:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;](https://media.shuijingwanwq.com/2024/06/2.png)
$str = '';
foreach ($criteria['whereRawIn'][1] as $key => $customer) {
$str .= ($key == 0) ? '(\'' : ',(\'';
$str .= implode('\',\'', $customer) . '\')';
}
var_dump($criteria['whereRawIn'][0]);
var_dump($str);
exit;
string(10) "name,email"
string(2959) "('客户姓名二','44445@163.com'),('客户姓名','44445@163.com')"
$str = '';
foreach ($criteria['whereRawIn'][1] as $key => $customer) {
$str .= ($key == 0) ? '(\'' : ',(\'';
$str .= implode('\',\'', $customer) . '\')';
}
// var_dump('(' . $criteria['whereRawIn'][0] . ')');
// var_dump('(' . $str . ')');
// exit;
$builder->whereRaw('? in ?', ['(' . $criteria['whereRawIn'][0] . ')', '(' . $str . ')']);
![运行时报错:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? order by `id` desc' at line 1 。](https://media.shuijingwanwq.com/2024/06/3.png)

![调整代码实现如下,运行时报错:SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 2 column(s) 。但是,将报错的 SQL 复制到数据库中,手动执行,执行成功](https://media.shuijingwanwq.com/2024/06/5.png)
$str = '';
foreach ($criteria['whereRawIn'][1] as $key => $customer) {
$str .= ($key == 0) ? '(\'' : ',(\'';
$str .= implode('\',\'', $customer) . '\')';
}
// var_dump('(' . $criteria['whereRawIn'][0] . ')');
// var_dump('(' . $str . ')');
// exit;
// $builder->whereRaw('? in ?', ['(' . $criteria['whereRawIn'][0] . ')', '(' . $str . ')']);
$builder->whereRaw('(?,?) in (?)', ['name', 'email', $str]);
// $builder->whereRaw('( ' . $criteria['whereRawIn'][0] . ' ) in (?)', [$str]);

foreach ($criteria['names_emails'] as $customer) {
$builder->orWhere(function ($query) use ($customer) {
$query->where('name', $customer[0])
->where('email', $customer[1]);
});
}
SELECT
`id`,
`name`,
`email`,
`type`
FROM
`customers`
WHERE
( `name` = '客户姓名二' AND `email` = '客户姓名二' )
OR ( `name` = '客户姓名' AND `email` = '客户姓名' )
ORDER BY
`id` DESC
PHP / Laravel / Yii2 老项目维护与长期技术支持
如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。
适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护
可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查
如需咨询,请联系我,并注明:PHP 维护咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

发表回复