如果在搜索中找不到结果,PHP PDO将显示消息
当执行MySQL“LIKE”查询后未找到搜索结果时,我尝试设置“No Results Found”消息 我有以下代码:如果在搜索中找不到结果,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
我有一个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'])