[英]PHP PDO: Differences between the methods of retrieving a single-column result
[英]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,这意味着:没有错误)。
您是否知道问题来自何处?
直接从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.