[英]How to count rows in a while loop using pdo fetch
我正在使用mysqli_fetch_array并且计数是正确的,直到我更改为fetch(),现在只返回总行数而不是返回每行的每个数字。
所以对于第一行,我想回显“1”,依此类推。
新注意 :while语句中的所有其他内容都返回正确的值,但计数器返回总行数,而我想要按照从sql语句中选择的顺序排序。
按照要求。 这是我的联系。
我不知道我是否想要检查“$ e-> getMessage();” 因为我在所有查询中使用此连接,所以在每个查询上。
try {
$dbh = new PDO('mysql:host=localhost;dbname=my_db;charset=utf8', 'usr', 'pwd',
array(PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
} catch (PDOException $e){
echo $e->getMessage();
}
这很有效
$query = mysqli_query($con, 'SELECT * FROM music');
$count = 0;
while($row = mysqli_fetch_array($query)){
$count++;
echo $count;
}
新的不起作用。
$query = $dbh->query('SELECT * FROM music');
$count = 0;
while($row = $query->fetch()){
$count++;
echo $count;
}
工作正常,使用try catch确实看看你的PDO连接是否正常工作。
try {
$dbh = new PDO('mysql:host=localhost;dbname=db', 'root', 'root',
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$sql = 'SELECT * FROM music';
$sth = $dbh->query($sql);
$count = 0;
while($row = $sth->fetch()){
$count++;
echo $count;
}
我刚刚测试了它,它工作正常。 您的PDO连接不正确或您的查询未返回任何结果。 我建议你var_dump($dbh)
并查看它是否返回一个PDO对象或检查你的查询是否正确。 你的桌子叫music
吗? 它区分大小写。
您还需要将连接形式mysqli更改为PDO
$mysqli = new mysqli("localhost", "user", "password", "database");
至
$dbh = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
您还可以抛出PDO异常以查看是否有任何异常: PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
$ conn-> exec(“SET CHARACTER SET utf8”);
关于什么:
if ($pdo){
$query=$pdo->prepare("SELECT count(*) as cnt FROM music");
if($query->execute()){
$count = $query->fetch()[0];//or fetch()['cnt']
echo $count;
}
}
PDO有一些不同的行为。 这是你的mysqli的替代品。
try {
$dbh = new PDO('mysql:host=localhost;dbname=database', 'user', 'password',array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// optional
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
));
$count = 0;
foreach ($dbh->query("SELECT * FROM `music`") as $row) {
$count++;
echo $count;
}
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
exit();
}
我希望有所帮助。
尝试使用PDO::FETCH_NUM
直接获取行数: -
$countquery = $dbh->query('SELECT COUNT(1) FROM music');
$rowCount = 0;
$rowCount = $countquery ->fetch(PDO::FETCH_NUM);
echo $rowCount;
//And then do another query for the real data if need be
*这使用查询来获取行计数,并节省了while循环所花费的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.