Ich habe ein Problem mit einem SQL-Aufruf, den ich habe. Letztendlich führe ich einen AJAX-Anruf aus einem Suchfeld aus und gebe die Ergebnisse an den Bildschirm zurück. Ich beschränke die Ergebnisse auf 5, aber wenn die Gesamtzahl der Ergebnisse 5 übersteigt, biete den Link an, um alles anderswo anzuzeigen. Ich dachte, indem Sie einfach eine COUNT()
Klausel in diesem würde sich um das Problem kümmern und während COUNT()
die volle Anzahl der Treffer korrekt zurückgibt, tötet es meine while
Anweisung beim Durchschleifen und gibt nur das erste Ergebnis zurück. Wenn ich count()
entferne, funktioniert alles.Warum bricht meine count() - Klausel meine while-Anweisung?
CODE
<?php
if(isset($_POST['word']) && $_POST['word'] != "")
{
$q=$_POST['word'];
try {
$db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare("SELECT COUNT(ID) as counter, ID, fname, lname FROM tablename WHERE fname LIKE ? or lname LIKE ? ORDER BY ID LIMIT 5");
$stmt->execute(array('%'.$q.'%', '%'.$q.'%'));
$foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
$db->commit();
}
catch (PDOException $e)
{
echo "There was a system DB error. <br>".$e->getMessage();
}
if(isset($foundrows) && $foundrows == 0) {
echo "<div class='display_box' align='left'>
No matching results found</div>";
} else {
while($row = $stmt->fetch()) {
$counter = $row['counter'];
$id = $row['ID'];
$fname = $row['fname'];
$lname = $row['lname'];
?>
<a href="#" style="text-decoration:none; color:#000;">
<div class="display_box" align="left">
<?php echo $fname; ?> <?php echo $lname; ?><br/>
</div></a>
<?php
}
if(isset($counter) && $counter > 5) {
?>
<a href="#" style="text-decoration:none; color:#000;">
<div class="display_box" align="left">
<?php echo (5-$counter)." additional matches found."; ?>
</div></a>
<?php
}
}
}
?>
Titel sollte eine Zusammenfassung Ihrer Frage sein – meagar
@meagar - Ich dachte 'was da puh' war ausreichend;). Vielen Dank! – JM4