如果在搜索中找不到结果,PHP PDO将显示消息

如果在搜索中找不到结果,PHP PDO将显示消息,php,mysql,pdo,Php,Mysql,Pdo,当执行MySQL“LIKE”查询后未找到搜索结果时,我尝试设置“No Results Found”消息 我有以下代码: 我有一个if语句只是为了测试错误消息是否有效,但我似乎得到了else语句“found”的输出 <table class="center"> <!-- Creating a table with the class of 'center' --> <!-- SEARCH FORM --> <?php

当执行MySQL“LIKE”查询后未找到搜索结果时,我尝试设置“No Results Found”消息

我有以下代码:
我有一个if语句只是为了测试错误消息是否有效,但我似乎得到了else语句“found”的输出

    <table class="center">          <!-- Creating a table with the class of 'center' -->
<!-- SEARCH FORM -->    
<?php 

    $KEYWORD = $_POST['keyword'];
    $stmt = $conn->prepare("SELECT DISTINCT dog_park_name FROM dog_park.items WHERE dog_park_name LIKE '%{$KEYWORD}%'");
    $stmt->execute();
    for($i=0; $row = $stmt->fetch(); ){ 
        $_SESSION["KEYWORD".$i] = $row[0];  


if(empty($stmt))
{
    echo 'Nothing found';
}
else
{
echo 'found';
}



?>
<!-- DISPLAY RESULTS -->
    <tr>            <!-- Adding the first table row -->
        <th>Dog Park</th>   <!-- Adding the second table header -->
    </tr>
    <tr>            <!-- Adding the second table row -->
        <td><a href="individual_item_page.php?keyword='<?php echo $row[$i] ?>' " ><?php echo $row[$i] ?></a></td>        <!-- Add the second cell on the second row -->
    </tr>
        <?php } ?>

</table>


您的if结构应显示“已找到”,因为您的查询已成功执行,在这种情况下,您可以计算行数以决定此问题:

if($stmt->rowCount() == 0)
{
     echo 'Nothing found';
}
else
{
     echo 'found';
}

您的if结构应显示“已找到”,因为您的查询已成功执行,在这种情况下,您可以计算行数以决定此问题:

if($stmt->rowCount() == 0)
{
     echo 'Nothing found';
}
else
{
     echo 'found';
}

我不打算讨论您当前代码中的SQL注入问题。您需要修复它,可能在准备好的语句中使用参数,但这是另一个主题

我还要说你的
关键字。$I
方法是一种反模式。为什么不在
$\u会话['KEYWORD']
下创建数字索引数组

$_SESSION['KEYWORD'] = array();
$stmt = $conn->prepare("SELECT DISTINCT dog_park_name FROM dog_park.items WHERE dog_park_name LIKE '%{$KEYWORD}%'");
if($stmt) {
    $result = $stmt->execute();
    if($result) {
        while($row= $stmy->fetch() {
            $_SESSION['KEYWORD'][] = $row[0];
        }
    }
}  
if(count($_SESSION['KEYWORD']) === 0) {
    echo 'Nothing found';
} else {
    echo 'found';
}

我不打算讨论您当前代码中的SQL注入问题。您需要修复它,可能在准备好的语句中使用参数,但这是另一个主题

我还要说你的
关键字。$I
方法是一种反模式。为什么不在
$\u会话['KEYWORD']
下创建数字索引数组

$_SESSION['KEYWORD'] = array();
$stmt = $conn->prepare("SELECT DISTINCT dog_park_name FROM dog_park.items WHERE dog_park_name LIKE '%{$KEYWORD}%'");
if($stmt) {
    $result = $stmt->execute();
    if($result) {
        while($row= $stmy->fetch() {
            $_SESSION['KEYWORD'][] = $row[0];
        }
    }
}  
if(count($_SESSION['KEYWORD']) === 0) {
    echo 'Nothing found';
} else {
    echo 'found';
}

要使Mike Brant的回答正确:

$stmt = $conn->prepare("SELECT DISTINCT dog_park_name FROM items WHERE dog_park_name LIKE ?");
$stmt->execute(array("%".$_POST['keyword']."%"));
$_SESSION['KEYWORD'] = $stmt->fetchAll(PDO::FETCH_COLUMN);

if($_SESSION['KEYWORD']) {
?>
<table>
  <tr><th>Dog Park</th></tr>
 <?php foreach($_SESSION['KEYWORD'] as $word):?>
    <tr><td><?php echo $word?></td></tr>
 <?php endforeach?>
</table><?php
} else {
    echo 'Nothing found';
}
$stmt=$conn->prepare(“从dog_park_名称类似的项目中选择不同的dog_park_名称?”);
$stmt->execute(数组(“%”“$\u POST['keyword']”.“%”);
$\u会话['KEYWORD']=$stmt->fetchAll(PDO::FETCH\u列);
if($\会话['KEYWORD']){
?>
狗公园

要使Mike Brant的回答正确:

$stmt = $conn->prepare("SELECT DISTINCT dog_park_name FROM items WHERE dog_park_name LIKE ?");
$stmt->execute(array("%".$_POST['keyword']."%"));
$_SESSION['KEYWORD'] = $stmt->fetchAll(PDO::FETCH_COLUMN);

if($_SESSION['KEYWORD']) {
?>
<table>
  <tr><th>Dog Park</th></tr>
 <?php foreach($_SESSION['KEYWORD'] as $word):?>
    <tr><td><?php echo $word?></td></tr>
 <?php endforeach?>
</table><?php
} else {
    echo 'Nothing found';
}
$stmt=$conn->prepare(“从dog_park_名称类似的项目中选择不同的dog_park_名称?”);
$stmt->execute(数组(“%”“$\u POST['keyword']”.“%”);
$\u会话['KEYWORD']=$stmt->fetchAll(PDO::FETCH\u列);
if($\会话['KEYWORD']){
?>
狗公园

$stmt->rowcount()是您的朋友。您确实需要了解如何使用准备好的语句。如果您正在努力使用准备好的语句,则不应将输入变量连接到查询字符串中,尤其是用户提供的变量,如来自$\u POST的变量。$stmt->rowcount()是您的朋友。您确实需要了解如何使用准备好的语句。如果您正在努力使用准备好的语句,则不应将输入变量连接到查询字符串中,尤其是用户提供的变量,如来自$\u POST的变量。如果在
$\u POST中替换
%
,效果会更好一些['keyword']
by
[%]
我真的不明白。是否要转义%?当然,如果用户向脚本发送
50%宽度
,它也会匹配
50个宽度阴影
文本;)得到以下错误消息PHP解析错误:语法错误,意外'D:\users\n9692703\KEYWORD\u SEARCH\u RESULTS.php的代码$stmt->execute([“%”“$”$\u POST['KEYWORD'].“%”);哦,不,
str\u replace(“%”,“[%]”,$\u POST['KEYWORD'])
如果用
$\u POST['KEYWORD'.[%]替换
$\code>中的
,效果会更好一些
我真的不明白。你想转义%?当然,如果用户将
50%宽度
发送到你的脚本,它也会匹配
50个宽度阴影
text;)得到以下错误消息PHP解析错误:语法错误,在D:\users\n9692703\KEYWORD\u SEARCH\u RESULTS.PHP的代码$stmt->execute([“%”“$\u POST['KEYWORD]”中出现意外“[”,预期“')。“%”];哦,不)只要
str_替换(“%”、“[%]”、$\u POST['keyword'])