2012-12-31 156 views
10

我有一个php脚本,通过mysql_选择数据,但是最近我一直在阅读,PDO是要走的路,而且mysql_正在贬值。现在我正在将该脚本转换为PDO。使用PDO语句选择表数据

我的问题是,虽然我没有使用$ _POST来选择。我只是想选择其所有数据的整个表,所以我进入这个查询:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchall(); // or you can just $result = $query as hakre proposed! 

所以后来就像我的剧本我以前的折旧mysql_版本中那样我使用echo呼应与表数据在里面。

echo 
    "<table border='2'> 
    <tr> 
    <th>ID</th> 
    <th>A Number</th> 
    <th>First Name</th> 
    <th>Last Name</th> 
    <th>Why</th> 
    <th>Comments</th> 
    <th>Signintime</th> 
    </tr>" 
    ; 

    foreach($result as $row) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['id'] . "</td>"; 
    echo "<td><a href=Student.php?studentA_num=" . $row['anum'] . ">" .$row['anum'] . " </a></td>"; 
    echo "<td>" . $row['first'] . "</td>"; 
    echo "<td>" . $row['last'] . "</td>"; 
    echo "<td>" . $row['why'] . "</td>"; 
    echo "<td>" . $row['comments'] . "</td>"; 
    echo "<td>" . $row['signintime'] . "</td>"; 
    echo "<td> <input type=\"button\" value=\"Start Session\"onClick=\accept.php?id=" . $row['id'] . "&start=true></td>"; 
} 

    echo "</tr>"; 
    echo "</table>"; 

现在使用这个,我不能得到一个单一的输出到我的表。

This is all that is being outputted

我的问题是我缺少从我的select语句的东西吗?或者我没有获取任何行?此外,我在一个名为connect.php另一个脚本设置的连接设置被需要的init.php(在我的所有网页的顶部)

编辑:1

编辑代码,以便它现在的作品,也添加一张图片以向其他人展示它的外观!希望有人可以把它用于某种用途! This is how it looks!

回答

10

你做得太多实际:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

问题的行是:

$result = $dbh->query($query); 

请与http://php.net/pdo.query,该参数是一个字符串,其实SQL字符串你已经使用上面,不是PDO::prepare()调用的结果值。

为您简单的查询,你可以这样做:

$result = $dbh->query("SELECT * FROM students"); 

如果你喜欢准备:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query; 

后来是一些样板,如果你想变量插入查询,这是你为什么要准备它。


下一个问题是与foreach行:

foreach($result as $row); 

你是因为在最后的分号;立即终止循环。删除该分号,以便后面的角括号代码块成为foreach循环的主体。

+0

我这样一个愚蠢的错误!谢谢你们两位! – RaGe10940

+0

你是新的。如果遇到问题,请从上到下进行验证。你可以使用['var_dump()'](http://php.net/var_dump)来查看变量,这通常很有帮助。还要将开发的错误报告设置为最高级别。 – hakre

+0

非常感谢你。 – RaGe10940

6

你的代码是错误的:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

执行预先准备的声明之后,你可以叫fetchAll()它:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchAll(); 

你的代码的其余部分将正常工作,一旦你删除分号之后。