繁体   English   中英

PHP / PDO:如果列= 0,没有结果?

[英]PHP/PDO : No result if a column = 0?

我有一个非常简单的功能来检查数据库,如果我们认识一个歌手(基于唯一的ID),如果是的话,我想收集他的信息:

function isArtistKnown($id_artist){
    global $pdo;

    $isKnownQuery = $pdo->query("SELECT * FROM artistes WHERE IDArtiste = '$id_artist'");
    if($isKnownQuery->rowCount() > 0){
        $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ);
        return $KnownArtiste;
    }else{
        return $isKnownQuery->errorInfo();
    }
}

问题如下:

如果已知IDArtiste,并且另一个名为“ last_tweet”(INT50)的列等于0,则PDO将找到1个结果,并填充$ KnownArtiste。现在,如果IDArtiste已知,但列“ last_tweet”!= 0,则PDO会变'找不到任何结果(并且errorInfo()等于0000,这意味着:没有错误)。

您是否知道问题来自何处?

文档指出:

PDO :: query()在单个函数调用中执行一条SQL语句,以PDOStatement对象的形式返回该语句返回的结果集(如果有)

这意味着,如果没有匹配项,则不返回任何行!

直接从PHP PDOStatement :: rowCount页面引用:

PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能返回该语句返回的行数。 但是,并非对于所有数据库都可以保证此行为,并且便携式应用程序不应该依赖此行为。

您不能将rowCount与SELECT一起使用。 使用此代替:

function isArtistKnown($id_artist){
    global $pdo;
    //If you don't use prepared statements, a kitten and a puppy die somewhere
    $isKnownQuery = $pdo->prepare("SELECT * FROM artistes WHERE IDArtiste = :ida");
    $isKnownQuery->bindValue(':ida', $id_artist);
    $isKnownQuery->execute(); 
    $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ);
    if(isset($KnownArtiste->IDArtiste)){
        return $KnownArtiste;
    }else{
        //Actually, in this case there's no error, just no artist
        //so i'd use
        return null;
        //instead of
        //return $isKnownQuery->errorInfo();
    }
}

如果要返回errorInfo()则无论是否存在错误,它将始终包含数据。 您应该返回一条友好的用户消息,以表明未找到任何行(您不认识该艺术家)

function isArtistKnown($id_artist){
    global $pdo;

    $isKnownQuery = $pdo->query("SELECT * FROM artistes WHERE IDArtiste = '$id_artist'");
    if ($isKnownQuery->rowCount() === 0){
        return false;
    }
    $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ);
    return $KnownArtiste
}

并验证:

$Validate = isArtistKnown(0);
if ($Validate === false){
 echo "Artist is Not Known";
}else{
 //Work with your data
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM