在我的桌子上
posts tags
[ id - title ] [pid - tag]
[ 1 - echo ] [ 1 - PHP]
[ 2 - for ] [ 1 - PDO]
[ 2 - PHP]
我做这个查询
if(isset($_POST['submit'])){
$tag = implode(",",$_POST['tags']);
$query = "
SELECT a.title FROM posts a
INNER JOIN tags b ON a.id = b.pid
WHERE b.tag IN (:tag)
";
$stmt = $pdo->prepare($query);
$stmt->execute(['tag' => $tag]);
while($row = $stmt->fetch()){
echo $row['title'];
}
}
这是发生了什么
如果[PHP]
仅选择,我会得到结果[echo - for]
如果[PDO]
只选择,我会得到结果[echo]
,
但是,如果我选择了该选项[php and pdo]
,我将一无所获,而且我期望得到结果echo
。我该如何解决我的查询?
不幸的是,即使您现在认为他们已经涵盖了这一点。不,您不能将数组绑定到准备好的语句上。
最终,您有2个选项,将其作为字符串直接提供给查询或使用 FIND_IN_SET
$tags = implode(",",$_POST['tags']);
$inString = implode(',', array_fill(0, count($tags), '?'));
$query = $db->prepare('
SELECT a.title FROM posts a
INNER JOIN tags b ON a.id = b.pid
WHERE b.tag IN(' . $inString . ')'
);
foreach ($_POST['tags'] as $key => $tag){
$query->bindValue(($key+1), $tag);
}
$query->execute();
$tags = implode(",",$_POST['tags']);
$query = $db->prepare('
SELECT a.title FROM posts a
INNER JOIN tags b ON a.id = b.pid
WHERE FIND_IN_SET(b.tag, :array)'
);
$query->bindParam('array', $tags);
$query->execute();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句