※ ChatGPTを利用し、要約された質問です(原文:PHPスペース区切り、複数単語が検索できません)
PHPスペース区切り、複数単語が検索できません
2022/08/17 07:39
このQ&Aのポイント
PHP初心者の方が、複数単語での検索がうまくいかない状況について質問しています。
具体的には、個人のサイトで6000点の点数に文言が添えられており、その文言をフォーム検索で抽出したいという要望です。
単語だけなら問題なく検索できますが、複数単語(スペース区切り)での検索がうまくいかない状況です。ソースコードの一部も提示されています。
お日ごろから大変お忙しい中、この投稿を見て頂きまして誠に有難うございます。私はPHP初心者です。もしこの投稿記事内容自体が私の勉強不足のために不適切な内容となっておりましたら大変申し訳ございません。至らない能力をご容赦して頂きたく存じ上げます。
現在、個人のサイトを作成しております。そこで合計6000点ほどの点数に対し文言が添えております。その文言(カラム/side_text)をフォーム検索で抽出したいのですが、単語だけならできるのですが、複数単語(スペース区切り)で検索をすると、どうしても上手くいきません。
下記にソースコードがございますので、もしお時間がございましたら、ご教授して頂けますと大変嬉しく思います。
var_dampで各要所をチェックしていったら複数単語でもちゃんとdbc.phpファイルの
$result = $stmt->fetchALL();
return $result;
まで返しているので、htmlへの出力方法がおかしいのかと思ったのですが、どうしても最後の最後はvar_damp()array(0)になってしまいます。
▼▼▼▼▼【var_damp(result)の結果】▼▼▼▼▼
「確定」と「福来い」を検索した場合
string(59) "(side_text LIKE "%確定%") AND (side_text LIKE "%福来い%")" array(0) { }
▲▲▲▲▲【var_damp(result)の結果】▲▲▲▲▲
test.phpページです
▼▼▼▼▼【フォーム検索送信】▼▼▼▼▼
<form action="search.php" method="POST">
<input type="text" name="search" placeholder="検索ワードを入力して下さい" autocomplete="off">
<input type="submit" value="SAERCH">
</form>
【html内の出力結果】
<?php if(isset($results)) : ?>
<?php foreach($results as $result) : ?>
<?php echo $result['side_text'] ; ?>
<?php endforeach ; ?>
<?php endif ; ?>
▲▲▲▲▲【フォーム検索送信】▲▲▲▲▲
search.phpページです
▼▼▼▼▼【フォーム検索送信/test.phpから受け取り】▼▼▼▼▼
$err = [];
if(!$search = filter_input(INPUT_POST, 'search')){
$err['search'] = '検索ワードを入力して下さい';
}
if(count($err) > 0){
$_SESSION = $err;
header('Location: test.php');
return;
}
if(count($err) === 0){
$results = search($_POST['search']);
}
▲▲▲▲▲【フォーム検索送信/受け取り】▲▲▲▲▲
dbc.phpページです
▼▼▼▼▼【dbc.phpページ】▼▼▼▼▼
function search(){
$result = false;
$keywords = $_POST['search'];
$keywords = mb_convert_kana($keywords, 's');
$ary_keyword = preg_split('/[\p{Z}\p{Cc}]++/u', $keywords, 5, PREG_SPLIT_NO_EMPTY);
$ary_keyword = explode(" " ,$keywords, 5);
$keywordCon = [];
foreach( $ary_keyword as $keyword ){
$keywordCon[] = '(side_text LIKE "%' . $keyword . '%")';
}
$keywordCon = implode(" AND ", $keywordCon);
$sql = "SELECT * FROM test1 WHERE". $keywordCon;
var_dump($keywordCon);
try{
$stmt = dbc()->prepare($sql);
$result = $stmt->execute();
$result = $stmt->fetchALL();
return $result;
}catch(\Exception $e){
echo 'Something wrong 3'. $e->getMessage();
return $result;
}
}
▲▲▲▲▲【dbc.phpページ】▲▲▲▲▲
間違いだらけのコーディングとは存じ上げますが、どうぞよろしくお願い申し上げます。
質問の原文を閉じる
質問の原文を表示する
お礼
ご回答を頂きまして、誠に有難うございます。同じレコードではございませんでした。ご回答を頂いて初めて同じレコード内を検索していた記述だと知りました。私はカラム指定をすれば全ての言葉を検索すると思っておりました。全てのレコード(横列)を含んだカラム名の指定方法がございますか?私自身も今から調べさせて頂きます。有難うございましたm(_ _)m
補足
t_ohtaさん 有難うございましたANDからORに変えるだけでした!自身の理解や造形の浅さを知り得たことが大きな収穫です。本当に有難うございました!これからも頑張ってまります!本当に有難うございました!