Соберите одно поле при вызове базы данных :: error php - PullRequest
1 голос
/ 17 августа 2011
        <h2>User Profile: <?php if($sth->rowCount() > 0) {$row = $sth->fetch(PDO::FETCH_ASSOC);echo "&nbsp;{$row['uname']}";} else {echo "No data.";}?></h2>
        <span class="two">Registered Date: <?php if($sth->rowCount() > 0) {$row = $sth->fetch(PDO::FETCH_ASSOC);echo "&nbsp;{$row['regDate']}";} else {echo "No data.";}?> </span><br />
        <span class="three">Current Grade: <?php if($sth->rowCount() > 0) {$row = $sth->fetch(PDO::FETCH_ASSOC);echo "&nbsp;{$row['currGrade']}";} else {echo "No data.";}unset($sth);?> </span><br />

Ошибка, которую я получаю: Неустранимая ошибка: вызов функции-члена rowCount () в строке 30

Строка 30:

    <span class="three">Current Grade: <?php if($sth->rowCount() > 0) {$row = $sth->fetch(PDO::FETCH_ASSOC);echo "&nbsp;{$row['currGrade']}";} else {echo "No data.";}unset($sth);?> </span><br />

SQL за кадром:

#Get Student Info :: for Page Content
$pdo = new PDO('mysql:host=localhost;dbname=ureviewdu', $u, $p);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $pdo->prepare('
    SELECT uname, currGrade, regDate
    FROM Student
    WHERE usrID = ?;
    ;');
$sth->execute(array(
    $userID
));

Этот обновленный код ничего не дает для каждого запроса ... почему?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Вы отменяете переменную PDOStatement $sth в конце каждого блока. Вы не сможете использовать его после сброса.

Вы, вероятно, должны просто создать одну логическую ветвь на основе результата выборки, например,

<?php if ($row = $sth->fetch(PDO::FETCH_ASSOC)) : ?>
<h2>User Profile: <?php echo htmlspecialchars($row['uname']) ?></h2>
<span class="two">Registered Date: <?php echo htmlspecialchars($row['regDate']) ?></span><br />
<span class="three">Current Grade: <?php echo htmlspecialchars($row['currGrade']) ?></span><br />
<?php $sth->closeCursor(); else : ?>
<h2>User Profile: No data.</h2>
<span class="two">Registered Date: No Data.</span><br />
<span class="three">Current Grade: No Data.</span><br />
<?php endif ?>
1 голос
/ 17 августа 2011

Я думаю, что каждый раз, когда вы пытаетесь получить значение столбца, на самом деле вы также продвигаете строку в наборе результатов.$row = $sth->fetch(PDO::FETCH_ASSOC); назначает строку для $row И продвигает курсор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...