如何使用pdo fetch计算while循环中的行数

use*_*875 7 php mysql sql counter pdo

我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)

这很有效

$query = mysqli_query($con, 'SELECT * FROM music');

$count = 0;
while($row = mysqli_fetch_array($query)){
    $count++; 
    echo $count;
}
Run Code Online (Sandbox Code Playgroud)

新的不起作用.

$query = $dbh->query('SELECT * FROM music');

$count = 0;
while($row = $query->fetch()){
    $count++; 
    echo $count;
}
Run Code Online (Sandbox Code Playgroud)

isw*_*nky 2

工作正常,使用 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;
}
Run Code Online (Sandbox Code Playgroud)

我刚刚测试过这个,效果很好。您的 PDO 连接不正确或者您的查询未返回结果。我建议您var_dump($dbh)查看它是否返回 PDO 对象或检查您的查询是否正确。你的桌子叫吗music?它区分大小写。

您还需要将连接形式 mysqli 更改为 PDO

$mysqli = new mysqli("localhost", "user", "password", "database");
Run Code Online (Sandbox Code Playgroud)

$dbh = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
Run Code Online (Sandbox Code Playgroud)

您还可以抛出 PDO 异常来查看是否发生任何异常: PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION