php - 包含通配符参数时,Laravel 原始表达式不起作用

标签 php mysql laravel

给定以下代码:

$sql = "SELECT * FROM items WHERE name LIKE '%?%'";
$key = 'orange';
$result = \DB::select(\DB::raw($sql), [$key]);

结果总是没有记录!

虽然通过将 LIKE 更改为 =,它工作正常:

$sql = "SELECT * FROM items WHERE name = ?";

我不知道为什么会这样,但我必须在此脚本中使用RAW。任何人都可以找出问题出在哪里吗?

最佳答案

你没有理解绑定(bind)是如何工作的......绑定(bind)不仅处理值中的引号和其他特殊字符,还处理引号

$sql = "SELECT * FROM items WHERE name LIKE ?";
$key = '%orange%';
$result = \DB::select(\DB::raw($sql), [$key]);

并在绑定(bind)之前记下 $key 值周围的 %

关于php - 包含通配符参数时,Laravel 原始表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149700/

相关文章:

mysql - 如何在一行中存储多个id?

php - Laravel 不在 'public' 服务器上显示特殊的 UTF8 字符

php - 这段 Ajax/Javascript 代码有什么问题?

"|"和数字的 php 正则表达式

数据库 | SET 和 TEXT 字段类型有什么区别?

mysql查找密码忘记了

php - 使用 laravel 5 调用 python gearman worker

php - 如何在不使用 include 或 require 的情况下将文件包含在 php 中?

PHP:如何在运行时创建和注册类

php - Laravel - 获取所有记录而不仅仅是第一个并将它们放在一起?