首页 文章

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

提问于
浏览
7

我正在使用mysqli_fetch_array并且计数是正确的,直到我更改为fetch(),现在只返回总行数而不是返回每行的每个数字 .

所以对于第一行,我想回显“1”,依此类推 .

NEW NOTE :while语句中的所有其他内容都返回正确的值,但计数器返回总行数,而我想要一个行号,它是从sql语句中选择的顺序 .

As requested. This is my connection.

我不知道我是否想要检查“$ 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();
}

This worked

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

$count = 0;
while($row = mysqli_fetch_array($query)){
    $count++; 
    echo $count;
}

The new doesn't work.

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

$count = 0;
while($row = $query->fetch()){
    $count++; 
    echo $count;
}

6 回答

  • 0

    工作正常,使用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() . "
    "; die(); } $sql = 'SELECT * FROM music'; $sth = $dbh->query($sql); $count = 0; while($row = $sth->fetch()){ $count++; echo $count; }

    我刚试过这个,它运行正常 . 您的PDO连接不正确或您的查询未返回任何结果 . 我建议你 var_dump($dbh) 并查看它是否返回PDO对象或检查您的查询是否正确 . 你的 table 叫 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

  • 2

    $ conn-> exec(“SET CHARACTER SET utf8”);

    http://coursesweb.net/php-mysql/pdo-select-query-fetch

  • -4

    关于什么:

    if ($pdo){  
        $query=$pdo->prepare("SELECT count(*) as cnt FROM music");
        if($query->execute()){
            $count = $query->fetch()[0];//or fetch()['cnt'] 
            echo $count;
        }
    }
    
  • 0

    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() . "
    "; exit(); }

    我希望有所帮助 .

  • 0

    尝试使用 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循环所花费的时间 .

  • -1

    你似乎混淆了PDO和MYSQLI_

    您说使用PDO连接后此代码有效吗?但是通过 mysqli_query() 发出查询 . 奇怪!

    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;
    }
    

    I dont think it did work, or you have changed something and you are not telling us.

    应该是这样的

    $con= mysqli_connect('localhost', 'usr', 'pwd', 'my_db');
    
    if (!$link) {
        die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
    }
    $query = mysqli_query($con, 'SELECT * FROM music');
    
    $count = 0;
    while($row = mysqli_fetch_array($query)){
        $count++; 
        echo $count;
    }
    

    所以你的第二段代码最好这样写: -

    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();
    }
    
    
    $sql = 'SELECT * FROM music';
    foreach ($dbh->query($sql) as $row) {
        $count++; 
        echo $count . "\n";
    }
    

相关问题