mysql - laravel Eloquent/QueryBuilder - 为什么变量 $prod 的值变成“?” 在 Sql 查询中?
问题描述
对不起我的英语语法,..
我想执行这个查询,但得到 0 结果,.. 我尝试签入 ->toSql() 函数,我看到值变成了?,。而不是值是“猪肉”,。为什么变成(?)问号?以及如何解决?
这是我使用模型的 laravel 查询
$items = Item::where("item_type_id", "!=", 1)
->where(function ($query) use ($prod){
$query->where("description", "like", "'%$prod%'")
->orWhere("id", "'%$prod%'");
})
->toSql();
dd($items);
结果就是这样,参数变成了“?”。
"select * from `items` where `item_type_id` !=
? and (`description` like
? or `id` =
?)"
解决方案
? 它是用于 SQL 注入的调用绑定。如果要获取绑定变量,则可以使用getBindings()
方法。
$items = Item::where("item_type_id", "!=", 1)
->where(function ($query) use ($prod){
$query->where("description", "like", "'%$prod%'")
->orWhere("id", "'%$prod%'");
});
$sqlquery = $items->toSql();
$bindings = $items->getBindings();
另一种替换方式?价值低于。
$sql_with_bindings = str_replace_array('?', $items->getBindings(), $items->toSql());
检查最后执行的查询的另一种方法是DB::enableQueryLog()
.
\DB::enableQueryLog();
$items = Item::where("item_type_id", "!=", 1)
->where(function ($query) use ($prod){
$query->where("description", "like", "'%$prod%'")
->orWhere("id", "'%$prod%'");
})->get();
dd(\DB::getQueryLog());
推荐阅读
- sql - 组合 SQL 如何在图书馆中找到可供借阅的书籍?
- c# - 下拉列表和文本框的 Mvc 条件验证
- apache-spark - 在 Spark 阅读器中,为了避免重复阅读 Hudi,格式选项是强制性的吗?
- c++ - 使用 STL 算法根据存储在另一个向量中的权重对向量进行排序
- javascript - Lambdatest 中测试的随机化环境
- email - 为什么来自 iredmail 的邮件会进入每个邮件提供商的垃圾邮件文件夹?
- git - 在 Cloudbuild 中安装软件包时收到“无法读取 'https://github.com' 的用户名:终端提示已禁用”
- javascript - 在 JS 中,为什么 event.target 会根据它是在模板文字中还是添加到字符串中给出不同的结果
- docker - 我想通过 docker 容器使用 shell 执行器在 gitlab-runner 中构建 docker 映像
- firebase - 如何将文档的ID存储在flutter firestore中的同一文档中