Saki0506
@Saki0506 (さき おぐら)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

php SQL count文でDBから取り出したデータを確認したいです

解決したいこと

SQLのSELECT文で対象のデータがない判断をcount文でやりたいのですが、どのようにやったら良いのか分からず色々な記事も読みましたが参考にできそうなものも私では見つけることができなかったので教えていただけると嬉しいです。

対象のソースコード

$dsn='mysql:dbname=db;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);


$sql="SELECT name,attribute,type,number FROM test_db 
    WHERE
        name LIKE '%$test_name%'
    AND
        attribute LIKE '%$test_attribute%'
    AND
        type LIKE '%$test_type%'
    AND
        number LIKE '%$test_number%'";
$stmt=$dbh->prepare($sql);
$stmt->execute();



$dbh=null;

自分で試したこと

$check=$stmt->fetch(PDO::FETCH_ASSOC);
if($check==false){
    print'検索したものはDBに存在しません。<br />';
    echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">戻る</a>'; 
    exit();
} 
$check=$stmt->fetch(PDO::FETCH_ASSOC);
    if(empty($check)){
        echo '検索したものはDBに存在しません。';
        echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">戻る</a>'; 
        exit();  
}

上記のようなコードは試してみましたが上手くいきませんでした。
countで値の有無を判断する方法が一番良いと記事で読んだのでそちらで実行してみようと思うのですが分からなかったので教えていただけると嬉しいです。
よろしくお願いします。

0

2Answer

$checkの中身がどうなっているか確認されましたか?
記事のコードを単純に写し書きして動かしてみても解決はしないと思うので、1行ずつ理解していく必要があります。

変数の中身を確認する方法はいろいろありますが、単純なのはvar_dumpを使う方法です。
var_dump($check)

countで値の有無を判断する方法が一番良いと記事で読んだのでそちらで実行してみようと思うのですが分からなかった

どういった記事を読んで、どの部分が分からなかったのか、という点も記載してあると回答もしやすいです。

0Like

存在チェックであれば、他に

  • 結果を1レコードに絞り、レコードの有無で判断
    • Limitとかそんなの (標準SQLだとfetch first 〜 rows only)
  • exsists句を使う
    • PostgreSQLなら select exists (...);が使える
    • 値としてtrue/falseが返るので、その値で判断する

いずれも使ってるRDBで方言に違いがあるのでリファレンスマニュアルをよく読んで対処してくだされ。

0Like

Your answer might help someone💌