【问题标题】:PHP SELECT query of array of named placeholders命名占位符数组的PHP SELECT查询
【发布时间】:2019-09-20 16:43:32
【问题描述】:

我想用name占位符将数组的值传递给select语句,如:

$keywords=("word1", "word2", etc);
$sql = "SELECT * FROM TABLE WHERE name LIKE :word1 AND name LIKE :word2 etc"

下面是我正在编写的脚本:

$symptoms=$_POST['search'];
$keywords = preg_split('/[\s]+/', $symptoms);
$totalKeywords = count($keywords);
$sql = "SELECT * FROM TABLE_3 WHERE MATCH (symptoms) AGAINST (:symptoms) ";
$like_placeholder = implode(' AND ', array_fill(0, $totalKeywords, 'symptoms LIKE ?'));
$sql .= " AND ({$like_placeholder})"; // build the query with placeholders
// prep input
$where_keywords = array_map(function($value) {
return "%{$value}%";
}, $keywords);
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':symptoms', $symptoms);
$stmt->execute([$_POST['search']]);
$stmt->execute($keywords);
$results = $stmt->fetchAll();

【问题讨论】:

  • 请不要只求我们为您解决问题。向我们展示您是如何尝试自己解决问题的,然后向我们确切展示结果是什么,并告诉我们您为什么觉得它不起作用。给我们一个关于什么不起作用的明确解释,并提供Minimal, Complete, and Verifiable exampleRead 如何提出一个好问题。
  • Mysqli 或 PDO ????
  • 您需要动态构建查询和参数数组。
  • @Barmar 请查看我的编辑问题。我的问题是在数组中传递变量。

标签: php mysql pdo


【解决方案1】:

您不能在同一查询中同时使用命名和问号占位符。将 :symptoms 占位符更改为 ? 并在 $keywords 数组的开头插入 $symptoms

您永远不会使用$where_keywords。您可以在 SQL 代码本身中连接 % 通配符。

$symptoms=$_POST['search'];
$keywords = preg_split('/[\s]+/', $symptoms);
$totalKeywords = count($keywords);
$sql = "SELECT * FROM TABLE_3 WHERE MATCH (symptoms) AGAINST (?) ";
$like_placeholder = implode(' AND ', array_fill(0, $totalKeywords, "symptoms LIKE CONCAT('%', ?, '%')"));
$sql .= " AND ({$like_placeholder})"; // build the query with placeholders
$stmt = $pdo->prepare($sql);
array_unshift($keywords, $symptoms);
$stmt->execute($keywords);
$results = $stmt->fetchAll();

【讨论】:

  • 在 $like_placeholder = implode(' AND ', array_fill(0, $totalKeywords, "symptoms LIKE CONCAT('%', ?, '%')") 中只需要一个额外的 ")")) ;
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多