我已经成功地获得了在 PDO 中执行和打印的查询,但是我在这里做错了。这个问题的代码的重要部分在最后几块代码中;为了清楚起见,我将第一部分包括在内。
此代码连接到具有多个输入字段的 HTML 表单。PHP 通过在 WHERE 语句中使用 AND 附加来自每个字段的数据来构造查询。
这就是我的想法:我回显了 $query 变量,我可以看到查询的格式正确,但是当我尝试打印查询结果时,没有打印任何结果。
我在这里与使用准备好的语句搏斗,并决定在未能构造具有不同数量参数的准备好的语句后尝试让代码在没有它们的情况下首先工作。在这篇文章的帮助下,我确实尝试过:LIKE query using multiple keywords from search field using PDOprepared statement
所以,暂时搁置准备好的陈述,谁能告诉我我在这里做错了什么?任何帮助将不胜感激。
<?php
if(isset($_POST['submit'])) {
// define the list of fields
$fields = array('titleSearch', 'keywordSearch', 'fullSearch', 'fromYear', 'toYear',
'fromSeconds', 'toSeconds', 'withSound', 'withColor');
$conditions = array();
// loop through the defined fields
foreach($fields as $field){
// if the field is set and not empty
if(isset($_POST[$field]) && $_POST[$field] != '') {
// create a new condition, using a prepared statement
$conditions[] = "$field LIKE CONCAT ('%', $_POST[$field], '%')";
}
}
// build the query
$query = "SELECT keyframeurl, videoid, title, creationyear, sound, color,
duration, genre FROM openvideo ";
// if there are conditions defined, append them to the query
if(count($conditions) > 0) {
$query .= "WHERE " . implode(' AND ', $conditions);
}
//confirm that query formed correctly
echo $query;
//print query results
foreach ($dbh->query($query) as $row){
print $row['videoid'].' - '.$row['title'].'<br />';
}
}
?>