前提・実現したいこと
SQLで任意の条件に合致するデータの件数を取得したいです。
補足情報の画像がテーブルです。
該当のソースコード
PHP
1$tagName = htmlspecialchars($tagName); 2//dbからコメントの総数を取る 3$counts = $db->query('SELECT COUNT(*) AS cnt FROM article WHERE tag LIKE \''.$tagName.'%\''); 4$cnt = $counts->fetch();
修正後
データの数が取得できません。likeですが完全一致のみのデータ数を取得したいです。
count($rows)の値が1で、想定していた値は7で異なります。
PHP
1//dbからコメントの総数を取る 2$counts = $db->prepare('SELECT COUNT(*) AS cnt FROM article WHERE tag LIKE ?'); 3$counts->bindParam(1, $tagName, PDO::PARAM_STR,12); 4$counts->execute(); 5$rows = $counts->fetch(); 6$maxPage = ceil(count($rows) / 6); //切り上げ 7$page = min($page,$maxPage); //$page>$maxPageだったら $page = $maxPage 8
$tagNameには文字列が入っています。
補足情報(FW/ツールのバージョンなど)
調べても何も出ませんか?
というか、1つ前のコードから劣化してます。
https://teratail.com/questions/317912
なぜバインドやめて直接SQLに入れ込んだのかわからないですね。
折角できていってたものなのに。
わざわざPHPマニュアルのサンプルコード引用して回答したのに・・・
理解できてないならそのように言ってもらえればよかったのですが。
https://www.php.net/manual/ja/mysqli-result.num-rows.php
などを試したのですが、取得できませんでした。
理解ができておらずエラーが取れなかったため、ほかの方法を調べていました。
「理解できてないのに解決済みにした」
という事態は異常です。
すみませんでした。
他の方の解決策も試したのですがエラーが取れず、m.ts10806さんに示していただいた公式ドキュメントを読んでも理解できず、回答者様に聞き返すことが申し訳なかったので諦めてしまいました。
回答した以上は、追加要件でもなければ、理解できるまで分かるまで付き合うつもりで投稿してる人のほうが多いです。
理解できないまま新たに同じ投稿されたほうがゲンナリします(私のコメントから伝わるでしょうか)。
そういう人はずっと初心者であるという印象です
ただPHPマニュアルは、いわば仕様書。最も正しいことが書いてあるドキュメントです。活用できるようになってください。
下手な例えや要約や解釈は本質的理解から離れるので、たいていは公式ドキュメントが参考として提示されます。
逆に言えばドキュメント活用できるようになると、初心者から脱せるということにもなります。
公式ドキュメントを読み理解できるように頑張ります。
質問内容を修正しました。ご教示ください。
$counts = $db->prepare('SELECT COUNT(*) AS cnt FROM article WHERE tag LIKE ?');
$counts->execute(array(
$_REQUEST['searchTag']
));
$cnt = $counts->fetch();
これで動いたのですが、問題点などないでしょうか。
本件は「SQLインジェクションを防ぎたい」ですよね。
そもそもそれ自体がどんなもので、どういう攻撃手法があるのかを調べるのが先決では?
対策したいのでしたら、コードが先ではできません。
というかそもそもLIKEの件、反映してないんですね。先日の回答が無駄に。
ありがとうございました。
投げっぱなしで、これまでのことを役に立たせることもなく投稿した質問をクローズすることなく退会ですか。なんと無責任だこと。
あなたの回答
tips
プレビュー
