質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

解決済

ヒットするはずの言葉を検索欄に入力してもヒットしない

Wsan
Wsan

総合スコア3

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1回答

0グッド

1クリップ

311閲覧

投稿2022/11/13 03:42

前提

ヒットするはずの言葉を検索欄に入力してもヒットしない
例:sqlに"pagename"の列を作っています。"pagename"の内のひとつに「テスト」という言葉があり、検索欄に「テスト」と入力するとその行を表示するようにしたいです。ただ実際には「テスト」と入力しても結果が表示されないです。

実現したいこと

sqlの"pagename"の列にある言葉を検索欄に入力するとその行を表示するようにしたいです。

発生している問題・エラーメッセージ

ヒットするはずの言葉を検索欄に入力してもヒットしない
例:sqlに"pagename"の列を作っています。"pagename"上の内のひとつに「テスト」という言葉があり、検索欄に「テスト」と入力するとその行を表示するようにしたいです。ただ実際には「テスト」と入力しても結果が表示されないです。

エラーメッセージ なし

該当のソースコード

<!DOCTYPE html> <html> <head>
<meta charset="utf-8"> <title>掲示板: A</title> <link rel="stylesheet" href="stylesheet.css">
</head> <body>
<div class="header0"> <div class="header00"> <h1 class="title">掲示板: A </h1> </div> </div> <div class="header1"> <h3><a class="terms" href="terms.html">●規約(読んでね)</a></h3> <h3><a href="newThread.php">●新規スレッド作成</a></h3> <form class="search" action="index.php" method="POST"> <h3>●スレッド検索</h3> <input class="box" type="search" name="search" placeholder="キーワードを入力"> <input class="button1" type="submit" name="submit" value="検索"> </form> <?php if (empty($_POST["search"])) { ?> <div class="new"> <h3>●新着スレッド</h3> <?php try { $pdo = new PDO('mysql:host=localhost;dbname=a_data', 'root', ''); } catch (PDOException $e) { echo $e->getMessage(); } $newThreadTitle_array = array(); $sql = "SELECT page_id ,pagename , post_time FROM `pagelist` ORDER BY page_id DESC;"; $newThreadTitle_array = $pdo->query($sql); foreach ($newThreadTitle_array as $newThreadTitle) : ?> <!--分からないときはページリンク、ページネーションでググって--> <a href="1.php?page_id=<?php print($newThreadTitle["page_id"]); ?>" class=newThreadTitle>・<?php echo $newThreadTitle["pagename"]; ?></a><br> <?php endforeach; ?> </div> <?php } else { ?> <div class="search"> <h3>●検索キーワード「<?php echo $_POST["search"]; ?>」の検索結果</h3> <?php try { $pdo = new PDO('mysql:host=localhost;dbname=a_data', 'root', ''); } catch (PDOException $e) { echo $e->getMessage(); } //https://blog.senseshare.jp/query-prepare.html#index1 $search_array = array(); $sql = $pdo->prepare("SELECT page_id , pagename FROM `pagelist` Where 'pagename' Like :search ;"); $sql->bindvalue(':search', $_POST["search"], PDO::PARAM_STR); $sql->execute(); $search_array = $sql->fetchall(PDO::FETCH_ASSOC); foreach ($search_array as $search) : ?> <!--分からないときはページリンク、ページネーションでググって--> <a href="1.php?page_id=<?php print($search["page_id"]); ?>" class=searchResult>・<?php echo $search["pagename"]; ?></a><br> <?php endforeach; } ?> </div> <div class="header2"> </div>
</body> </html> ```html,php,sql ソースコード ```

試したこと

1.POSTをGETにする。
2.fetchall(PDO::FETCH_ASSOC)のPDO::以降を調べて別の該当しそうなものに変更する。

ここに問題に対して試したことを記載してください。
1.症状に変化なし
2.症状に変化なし

補足情報(FW/ツールのバージョンなど)

PHP Version 8.1.6

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

こんにちは。

ソースを拝見しました。

少し気になるのは以下のところですね。

$sql = $pdo->prepare("SELECT page_id , pagename FROM `pagelist` Where 'pagename' Like :search ;");

Where句にあるpagenameカラムがシングルクォートで囲まれているようですが、
正しくはバッククォートではないでしょうか?

投稿2022/11/13 03:58

srsnsts

総合スコア441

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Wsan

2022/11/13 04:09

早速の回答ありがとうございます。当該部分を修正しましたが症状は改善しませんでした。 To 上記回答者様を含めた他の回答者の皆様 上記の情報だけではわからないなどありましたら、何の情報が追加で必要かなど情報いただけますと幸いです。
srsnsts

2022/11/13 04:18

う〜ん違いましたか。 もう一箇所怪しい所がありますね。 $sql->fetchall(PDO::FETCH_ASSOC) と書かれていますけどfetchAllが正しいのではないでしょうか?
Wsan

2022/11/13 04:38

回答ありがとうございます。 そうすると以下のようなエラーが出ます。 Warning: Undefined property: PDOStatement::$fetchall in C:\xampp\htdocs\index.php on line 71 Warning: foreach() argument must be of type array|object, null given in C:\xampp\htdocs\index.php on line 74 二つ目のwarningをみてfetchAllではなくfetchall(PDO::FETCH_ASSOC)にしていたという経緯があります。
srsnsts

2022/11/13 04:53

少し誤解があるようです。 まずWsanさんにはっきり言っておかないといけないのは、 phpの標準関数にfetchallという名前の関数はありません、ということです。 fetchallではなくfetchAll、です。 (https://www.php.net/manual/ja/pdostatement.fetchall.php) 1つめのwarningは、PDOStatementにfetchallというプロパティはありません、という意味です。 2つ目のwarningは、foreachに与えるのは配列かオブジェクトでなければならない、という意味です。
srsnsts

2022/11/13 04:55

新着スレッドの部分において、pagelistテーブルのデータは表示されているんですか?
Wsan

2022/11/13 05:02

誤解しておりました。ただfetchAllでも症状変わらずです。 新着スレッドの部分について、pagelistのデータは表示されます。エラーなども特に出てはいないです。
srsnsts

2022/11/13 05:08

ありがとうございます。 新着スレッドのデータが出ているのですね。 う〜んなんだろう。
srsnsts

2022/11/13 05:19

fetchAllまでをtryのブロックの中に入れてもらったらどうなりますか?
srsnsts

2022/11/13 05:48

ああ、bindvalueではなくbindValueですね。 そこも合わせて直して頂ければと思います。
Wsan

2022/11/13 05:53

上記の通りにしてみましたが、特に症状も改善せず、エラーも出力されません。
srsnsts

2022/11/13 06:03

う〜ん。 検索文字を入力しないで実行した場合って、 pagelistテーブルの全データを表示しますよね。 基本的なこと聞いて申し訳ないんですけど、そこに「テスト」ってありますか?
Wsan

2022/11/13 09:23

上記の質問みて原因がわかりました。 bindValue中のPOSTを'%'で囲っていなかったことが原因だったようです。 お騒がせしてすみませんでした。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。