【发布时间】:2010-11-24 16:51:48
【问题描述】:
我的 SQL 调用有问题。最终,我正在从搜索框中运行 AJAX 调用并将结果返回到屏幕。我将显示的结果限制为 5 个,但如果结果总数超过 5 个,请提供在其他地方查看所有结果的链接。我认为只需在其中添加一个COUNT() 子句就可以解决这个问题,虽然COUNT() 确实正确返回了全部匹配数,但它会在循环时杀死我的while 语句并且只返回第一个结果。当我删除 count() 时,一切正常。
代码
<?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 - 我认为“what da puh”就足够了;)。谢谢!