PDO fetchAll和foreach不返回第一行

时间:2015-03-04 19:47:10

标签: php mysql pdo

我的PHP中有这个:

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$selected_client = $_POST['client'];
$sql = 'SELECT `cohort_id`,`cohort_name`, `cohort_description` FROM table_cohorts where client_id = :client';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) );
$stmt->execute(array(':client' => $selected_client));
foreach ($stmt as $row){
$result = $stmt->fetchAll();
}
header('Content-type: application/json');
echo json_encode($result);

这会返回几乎正确的内容。它返回我的db表中除第一个之外的所有相关的预期行。我猜我在某种程度上覆盖了这个,但不确定它在哪里出错。

2 个答案:

答案 0 :(得分:3)

不确定为什么你在那里有一个foreach循环。您可以在$result上使用foreach循环遍历行,这时您想要的是所有行,这样您就可以放弃循环。

foreach ($stmt as $row){
    $result = $stmt->fetchAll();
}

并保留这一部分。

$result = $stmt->fetchAll();

答案 1 :(得分:1)

只需使用

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

并摆脱foreach循环。