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工作正常,因此该查询存在数据。
答案 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)
给你FALSE
。 documentation说:
此函数的成功返回值取决于获取类型。在所有情况下,失败时都会返回> 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);
如果第二个查询返回行而第一个没有 - 则没有找到数据 如果两者都没有返回任何行 - 那么它是由错误的数据库设计引起的,这可以从表名中清楚地看到,表名永远不应该有这样的后缀