php - 用一个变量查询多个字段的PDO最佳实践

标签 php mysql optimization pdo

以下导致错误,因为我无法将一个 var 绑定(bind)到多个占位符:

$search = "%somename%";
$stmt = $pdo->prepare("SELECT * FROM persons WHERE firstname LIKE :search OR lastname LIKE :search");
$stmt->bindValue(":search", $search, PDO::PARAM_STR);
$stmt->excecute();

我的解决方法如下:

$search = "%somename%";
$search1 = $search;
$search2 = $search;
$stmt = $pdo->prepare("SELECT * FROM persons WHERE firstname LIKE :search1 OR lastname LIKE :search2");
$stmt->bindValue(":search1", $search1, PDO::PARAM_STR);
$stmt->bindValue(":search2", $search2, PDO::PARAM_STR);
$stmt->excecute();

我觉得这样效率不是很高。 我必须复制我的 var 2 次才能绑定(bind)它 2 次。如果我想查询 6 个字段,我需要复制它 6 次。我的感觉是一定有更好的方法。

是否有更好的解决方法来处理这种情况?

最佳答案

我的解决方法

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);

说到效率,基于LIKE 的搜索在设计上效率极低。你的效率才是你真正需要的,那么至少要使用FULLTEXT搜索。或者 - 更好 - 像 SphinxSearch 这样的专用搜索引擎。

关于php - 用一个变量查询多个字段的PDO最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715640/

相关文章:

php - 了解您必须处理/扩展的新网络系统

python - 请帮我优化我的Python代码

performance - Go:通过 slice slice (二维 slice )访问数组时出现意外性能

cocoa - 临时文本属性导致速度大幅下降

mysql多表查询

php - 如何用 PHP 正确销毁 session cookie?

php - 使用 MYSQL Distinct 和 PHP 显示一次年份

php - 调用数组中的特定列

c# - DataGridView 新线程内默认报错

PHPUnit 安装到 CakePHP - 没有 Autoload.php