PHP PDO SELECT查询未显示结果

时间:2014-01-13 21:07:52

标签: php mysql sql pdo

我在PHP中运行此PDO查询:

$stmt = $pdo_conn->prepare("SELECT * from contacts where email = :email ");
$stmt->execute(array(':email' => $from ));
$contact = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($contact) > 0) {
    echo $contact["email"];
}

但它没有回应联系人表格中的电子邮件列

我知道那里有一个值,好像我回应'是';在它显示的if语句中

我在这里做错了什么?

的var_dump($接触);示出了

array(1) { [0]=> array(22) { ["sequence"]=> string(3) "266" ["newsletter"]=> string(3) "yes" ["company_sequence"]=> string(3) "278" ["title"]=> string(2) "Mr" ["forename"]=> string(7) "Forename" ["surname"]=> string(4) "Surname" ["email"]=> string(22) "user@domain.com" ["password"]=> string(32) "**********" ["phone"]=> string(0) "" ["mobile"]=> string(11) "00000000000" ["notes"]=> string(0) "" ["contactstatus"]=> string(0) "" ["logintries"]=> string(1) "0" ["dob"]=> string(10) "0000-00-00" ["receive_allticketupdates"]=> string(3) "yes" ["receive_accountsemails"]=> string(3) "yes" ["can_edit_contacts"]=> string(3) "yes" ["view_all_tickets"]=> string(3) "yes" ["receive_orderemails"]=> string(0) "" ["can_login_online"]=> string(3) "yes" ["last_satisfaction_survey_received"]=> string(10) "0000-00-00" ["receive_domainemails"]=> string(0) "" } }

3 个答案:

答案 0 :(得分:1)

似乎$contact将包含一系列行。因此,您需要访问特定行的email字段。像这样:

echo $contact[0]['email'];

或使用循环:

if (!empty($contact)) {
  foreach ($contact as $thisContact) {
    echo $thisContact['email'];
  }
}

或者,使用fetchAssoc代替fetchAll

while ($contact = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $contact['email'];
}

答案 1 :(得分:1)

因为您正在使用fetchAll(),所以即使只有一个结果,您也会收到一个二维结果数组。

要从中获得单一结果,您可以通过$contact[0]来访问它:

echo $contact[0]['email'];

或者,如果您希望/期望单行,则可以使用fetch()代替fetchAll()

$contact = $stmt->fetch(PDO::FETCH_ASSOC);
if(count($contact) > 0) {
    echo $contact["email"];
}

答案 2 :(得分:0)

fetchAll获取数组中的所有行,因此结果为多维数组。

您可能正在寻找echo $contact[0]["email"];