🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

2009閲覧

PHPでデータベースから条件に合ったデータのみを取得したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2021/01/23 05:00

前提・実現したいこと

PHPでデータベースから条件に合ったデータのみを取得したい。
URLパラメータでタグの名前を指定し、条件に合致した列のデータを取得したいです。

http://localhost/html/Blog/searchTag.php?searchTag=プログラミング

イメージ説明

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

NULL

データベースからデータを取得できていないため、データが表示されないです。

該当のソースコード

PHP

1<?php 2require('dbconnect.php'); 3 4//URLパラメータで渡ってきたpage 5$tagName = $_REQUEST['searchTag']; 6 7//URLパラメータで渡ってきたpageがnullだったら 8if($page == ''){ 9 $page = 1; 10} 11//$pageが1より小さかったら$page=1 12$page = max($page,1); 13 14//dbからコメントの総数を取る 15$counts = $db->prepare('SELECT COUNT(*) AS cnt FROM article LIKE ? ORDER BY created DESC'); 16$counts->bindParam(1, $tagName, PDO::PARAM_STR, 12); 17//$cnt = $counts->fetch(); //SQLたたいたらfetch()する 18$cnt = $counts->execute(); 19$maxPage = ceil($cnt['cnt'] / 6); //切り上げ 20$page = min($page,$maxPage); //$page>$maxPageだったら $page = $maxPage 21 22//ページネーションの計算 23$start = ($page - 1)*6; 24//データベースから取得 25$searchTagArticles = $db->prepare('SELECT * FROM article LIKE ? ORDER BY created DESC LIMIT ?,6'); 26//LIKE ?に入るのはtagの名前である。 27$searchTagArticles->bindParam(1, $tagName, PDO::PARAM_STR, 12); 28//LIMIT ?,5の?に入るのはint型ではないといけないので型指定できるbindParam(1, $start, PDO::PARAM_INT)を使う 29$searchTagArticles->bindParam(2, $start, PDO::PARAM_INT); 30$searchTagArticles->execute(); 31 32?>

試したこと

$tagNameには文字列が代入されていることを確認しました。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

これだとSQLのシンタックスエラーになります。

SQL

1SELECT COUNT(*) AS cnt FROM article LIKE ? ORDER BY created DESC 2# ↓ 以下のように変更 3SELECT COUNT(*) AS cnt FROM article WHERE tag LIKE ? ORDER BY created DESC

もう一つのSQL文も同様です。

投稿2021/01/23 05:21

編集2021/01/23 05:22
ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/23 05:29

ご指摘の通りに変更しWHERE tagを追加しましたが、結果は変わりませんでした。
guest

0

ベストアンサー

likeにワイルドカード(%)がないと=と同等です。
前方一致、後方一致、部分一致 は明示しないといけません。
バインドする際につけてください。

PDOStatement::bindParam

// Get the keyword from query string
$keyword = $_GET['keyword'];
// Prepare the command
$sth = $dbh->prepare('SELECT * FROM users WHERE firstname LIKE :keyword');
// Put the percentage sing on the keyword
$keyword = "%".$keyword."%";
// Bind the parameter
$sth->bindParam(':keyword', $keyword, PDO::PARAM_STR);

ただ、bindParamには副作用があるので、bindValueのほうが良いでしょうけど。
bindParam()とbindValue()の違い

あと、SQLを直接実行して想定の結果を得られてからPHPから使ってください。

PHPで実装する際も、エラーハンドリングは必須です。

投稿2021/01/23 05:16

編集2021/01/23 05:23
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/23 06:11

SQLが原因でした。ありがとうございます。
m.ts10806

2021/01/23 06:15

SQLを直接実行して想定の結果を得られてからPHPから使ってください。 PHPで実装する際も、エラーハンドリングは必須です。
guest

0

PHPでデータベースから条件に合ったデータのみを取得したい。

URLパラメータでタグの名前を指定し、条件に合致した列のデータを取得したいです。

検索の条件が明記されていないので微妙ですが、抽出のための条件が適切に記述されていないことが問題かと。
LIKE の使用方法を調査すると良いです。

投稿2021/01/23 05:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問