PDO で実行して印刷するクエリを正常に取得しましたが、ここで何か間違ったことをしています。この質問のコードの重要な部分は、コードの最後の数ブロックにあります。わかりやすくするために、最初の部分を含めています。
このコードは、複数の入力フィールドを持つ HTML フォームに接続します。PHP は、WHERE ステートメントで各フィールドのデータに AND を追加して、クエリを作成します。
これは私をスローするものです: $query 変数をエコーし、クエリが適切に形成されていることを確認できますが、クエリ結果を印刷しようとすると、結果が印刷されません。
ここではプリペアド ステートメントの使用に取り組み、さまざまな数のパラメーターを使用してプリペアド ステートメントを作成できなかったため、最初にそれらを使用せずにコードを動作させることを試みることにしました。この投稿の助けを借りて、試してみました: PDO 準備済みステートメントを使用して、検索フィールドから複数のキーワードを使用する LIKE クエリ
それで、今のところ準備された声明を脇に置いて、誰かが私がここで間違っていることを教えてもらえますか? どんな助けでも大歓迎です。
<?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 />';
}
}
?>