如何使用mySQL PDO输出数据?

时间:2013-06-03 02:15:32

标签: php mysql pdo

mySQL PDO新手。我在这里阅读了其他答案并阅读了教程,并最终采取了暴跌。问题是我似乎无法输出数据。因此,有人可以评估我的代码以确保它是正确的吗?此外,我正在使用的系统来查询数据库有效,干净和安全吗?感谢

$pdo --- the correct connection information is in this line but has been removed ---
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SELECT sql query
try {
 $thedate='2013-06-03';
 $rotation=1;
 $stmt = $pdo->prepare("SELECT * FROM sched_main_2013 WHERE thedate=:thedate AND rotation=:rotation");
 $stmt->bindValue(':thedate', $thedate, PDO::PARAM_STR);
 $stmt->bindValue(':rotation', $rotation, PDO::PARAM_INT);
 $stmt->execute();
 $stmt->setFetchMode(PDO::FETCH_ASSOC);  
}
catch(PDOException $ex) { 
 echo $ex->getMessage(); 
} 
while($rows = $stmt->fetch()) {  
 echo $rows['thedate'] . "\n";  
 echo $rows[assignedRad] . "\n";  
 echo $rows[rotation] . "\n";  
}

// close the connection
$pdo = null;

此代码不输出任何内容。没有错误。什么都没有。

顺便说一下,当我手动运行mySQL语句时,表存在并且SELECT * FROM工作正常,因此该查询存在数据。

3 个答案:

答案 0 :(得分:1)

尝试

while($rows = $stmt->fetch()) {  
 echo $rows['thedate'] . "\n";  
 echo $rows[assignedRad] . "\n";  
 echo $rows[rotation] . "\n";  
}

while($rows = $stmt->fetch()) {  
 echo $rows['thedate'] . "\n";  
 echo $rows['assignedRad'] . "\n";  
 echo $rows['rotation'] . "\n";  
}

调试01

也许您可以尝试这个来测试您是否真正从数据库接收任何数据

print_r($stmt->fetchAll());

而不是你的while循环


调试02
尝试一下您坚信不会出现SQL错误的简单查询,例如:

  

SELECT * FROM sched_main_2013

没有任何价值绑定。


调试03

尝试使用WHERE条件的另一个查询,但没有绑定

SELECT * FROM sched_main_2013 WHERE thedate='2013-06-03' AND rotation=1

答案 1 :(得分:1)

你告诉var_dump($row)给你FALSEdocumentation说:

  

此函数的成功返回值取决于获取类型。在所有情况下,失败时都会返回> FALSE。

添加以下行:

while($row = $stmt->fetch()) { 
 echo $row['thedate'] . "\n";  
 echo $row['assignedRad'] . "\n";  
 echo $row['rotation'] . "\n";  
}

if($row === FALSE) {
    var_dump($stmt->errorInfo());
    die();
}

进一步说明:您最初将$stmt->fetch() $rows(复数)的返回值命名为$row。我不确定你是否知道每次调用该方法时都会返回一行。

答案 2 :(得分:1)

它必须是什么

$sql = "SELECT * FROM sched_main_2013 WHERE thedate=? AND rotation=?";
$data = array('2013-06-03', 1);
$stmt = $pdo->prepare($sql);
$stmt->execute($data);
$rows = $stmt->fetchAll();  
var_dump($rows);

$sql = "SELECT * FROM sched_main_2013";
$data = array();
$stmt = $pdo->prepare($sql);
$stmt->execute(array());
$rows = $stmt->fetchAll();  
var_dump($rows);

如果第二个查询返回行而第一个没有 - 则没有找到数据 如果两者都没有返回任何行 - 那么它是由错误的数据库设计引起的,这可以从表名中清楚地看到,表名永远不应该有这样的后缀