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

时间:2014-08-08 08:30:48

标签: php mysql sql pdo counter

我正在使用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;
}

6 个答案:

答案 0 :(得分: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;
}

我刚试过这个,它运行正常。您的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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

怎么样:

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

答案 3 :(得分: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() . "<br/>";
    exit();
}

我希望有所帮助。

答案 4 :(得分:-1)

尝试使用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循环所需的时间。

答案 5 :(得分:-4)

您似乎混淆了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;
}

我认为它没有用,或者你已经改变了一些事情而你没有告诉我们。

应该是这样的

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