如何使用PDO获取和显示数组?

时间:2012-12-27 21:05:21

标签: arrays pdo fetch

我知道有很多方法可以做到这一切,但尝试以最好的方式做到这一点。

我已经创建了db参数,dns,dbh,sth,sql,并且通常对结果非常满意......结果部分。

<?php

// db parameters
$dbhost = "localhost";
$dbname = "x";
$dbuser = "y";
$dbpass = "z";

// driver invocation (dsn is short for data source name)
$dsn = "mysql:host=$dbhost;dbname=$dbname";

// create db object (dbh is short for database handle)
$dbh = new PDO($dsn, $dbuser, $dbpass);

// execution of database query (sth is short for statement handle)
$sql = "SELECT * FROM a_aif_remaining";
$sth = $dbh->prepare($sql);
$sth->execute();

不确定下面是什么......(A)或(B)

我只是想呈现一个简单的数据数组。每行表格中的一行。

选项A

echo $_POST['fieldname1'];
echo $_POST['fieldname2'];
echo $_POST['fieldname3'];

选项B

while ($rows = $sth->fetch(PDO::FETCH_ASSOC)) {
    echo $row[fieldname1],'<br>';
    }

我对结束充满信心

    $dbh = NULL;

?>

任何建议都会非常感激。




更新代码:(页面上不生成任何内容)

<?php

    // db parameters
    $dbhost = "localhost";
    $dbname = "theaudit_db1";
    $dbuser = "theaudit_user";
    $dbpass = "audit1999";

    $dsn = "mysql:host=$dbhost;dbname=$dbname"; // driver invocation (dsn is short for Data Source Name)

try {
    $dbh = new PDO($dsn, $dbuser, $dbpass); // connect to new db object (dbh is short for Database Handle)
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // set the PDO error mode to enable exceptions
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // set the PDO emulate prepares to false

    // execute query to database (sth is short for Statement Handle)
    $sql = "SELECT * FROM a_aif_remaining";
    $sth = $dbh->prepare($sql);
    $sth->execute();

    $data = $sth->fetchAll(PDO::FETCH_ASSOC);

    $dbh = NULL;
}

catch(PDOException $e)
    {
    echo $e->getMessage();
}
?>

2 个答案:

答案 0 :(得分:1)

虽然我无法得到A和B之间的联系,但我可以回答

  

我只是想呈现一个简单的数据数组。每行距离表格一行。

问题。

$sql = "SELECT * FROM a_aif_remaining";
$sth = $dbh->prepare($sql);
$sth->execute();
$data = $sth->fetchAll(PDO::FETCH_ASSOC);

其中$data是一个寻求的数组。

答案 1 :(得分:0)

更新代码的问题很简单 - 您不会回显您的数据。你需要添加像..

这样的东西
   foreach($data as $arKey=>$dataRow){
        foreach($dataRow as $arKey=>$rowField){
             echo $rowField.','; //concat with a ',' to give csv like output 
        }
        echo '<br>'; //to get to next line for each row (may want to trim the last ','
   }

我也对$ _POST的引用感到困惑。确实两者都是关联数组,但这并不意味着$ _POST选项是可行的 - 如果将数据放在那里(例如$ _POST = $ data),数据只能在$ _POST中可用,这将是毫无意义的。或者,如果您从其他地方发布了数据。似乎都不适合你所要求的,所以我会忘记$ _POST,只是弄清楚如何访问你的多维$ data数组。在这个问题上有无穷无尽的啧啧。尝试使用

    var_dump($data) 

看看里面的内容应该可以帮助你想象正在发生的事情。

注意:在选项B中,您没有正确连接或引用您的阵列,它应该是:

    while ($rows = $sth->fetch(PDO::FETCH_ASSOC)) {
        echo $rows[fieldname1].'<br>'; //$row doesnt exist its $rows and you use . to concat not ,
        }

啊是的,可能更好地使用unset而不是将$ dbh设置为null

unset($dbh);