私はSQL呼び出しに問題があります。最終的に、私は検索ボックスからAJAX呼び出しを実行し、その結果を画面に戻しています。私は結果を5に制限しますが、結果の合計数が5を超える場合は、リンクを提供して他の場所を表示してください。私はこれにCOUNT()
句を追加するだけで問題が解決されると思っていましたが、COUNT()
は完全な一致数を正しく返していますが、ループバックして最初の結果のみを返すときにwhile
文がkillされます。 count()
を削除すると、すべて動作します。count()句がwhile文を壊すのはなぜですか?
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
}
}
}
?>
タイトルはあなたの質問の要約でなければなりません。 – meagar
@meagar - 私は「どんなことが十分であったか」と思っていました。ありがとう! – JM4