0

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 工作正常,因此该查询确实存在数据。

4

3 回答 3

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循环


Debug 02
试试你坚信不会出现 SQL 错误的简单查询,例如:

选择 * 从 sched_main_2013

没有任何值绑定。


调试 03

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

SELECT * FROM sched_main_2013 WHERE thedate='2013-06-03' AND rotation=1
于 2013-06-03T02:25:14.043 回答
1

你说var_dump($row)给你FALSE文档说:

此函数成功时的返回值取决于获取类型。在所有情况下,>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. 我不确定您是否知道该方法每次调用时都会返回一行。

于 2013-06-03T02:34:46.660 回答
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);

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

于 2013-06-03T04:27:01.040 回答