我正在寻找一种方法来返回错误,如果在MySql查询中找不到结果,首先我声明了一个变量值false,如果fetch()函数为true,它会将该boolean的值设置为是的,然后我检查它是真还是假,但后来我在互联网上搜索了因为我不喜欢我的解决方案那么多,所以我找到了函数IFNULL(查询,'错误消息'); 我试了但是我有一个错误,你能告诉我我的代码有什么问题吗?
if(isset($_POST['tosearchfor']))
{
$query = $db->query('SELECT IFNULL( (SELECT * FROM searchfor WHERE title LIKE \'%'.$_POST['tosearchfor'].'%) , \'Sorry, no resluts found for : <strong>'.$_POST['tosearchfor'].'strong');
while($result = $query->fetch())
{
echo '<div class="result"><a class="title" href="#">'.$result['title'].'</a><span class="link"><span style="font-size:15px;position:relative;top:0.8px;padding-right:2px;">‣</span>https://www.qsoft.com/'.$result['link'].'</span><span class="details">'.$result['details'].'</span></div>';
}
}
else
{
echo 'Error : empty search';
}
谢谢。
答案 0 :(得分:1)
嘿,我使用的不同方法不是你的查询,而是使用$query->rowCount()
。
让我们在查询之外使用IF :)
$db->prepare
保护您的查询,因为在没有保护的情况下,永远不会将$ _POST直接放在查询中。
if(isset($_POST['tosearchfor'])){
//We prepare the query
$query = $db->prepare("SELECT * FROM searchfor WHERE title LIKE '%:tosearch%'");
//We had parameters
$query->bindParam(':tosearch',$_POST['tosearchfor'], PDO::PARAM_STR);
//We execute the query
$query->execute();
//We retrieve the results in array of objects
$results = $query->fetchAll(PDO::FETCH_OBJ);
if (count($results) > 0) {
foreach ($results as $result){
echo '<div class="result">
<a class="title" href="#">'.$result->title.'</a>
<span class="link">
<span style="font-size:15px;position:relative;top:0.8px;padding-right:2px;">‣</span>
https://www.qsoft.com/'.$result->link.'
</span>
<span class="details">'.$result->details.'</span>
</div>';
}
} else {
echo 'Sorry, no resluts found for : <strong>'.$_POST['tosearchfor'].'</strong>';
}
}else{
echo 'Error : empty search';
}
答案 1 :(得分:1)
IFNULL(expr1,expr2)的默认结果值是“更一般” 这两个表达式的顺序为STRING,REAL或INTEGER。
您无法使用IFNULL评估一组记录。像下面的东西
也可以使用以下方法来避免sql注入,而不是使用直接替换值。
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(array(':name' => $name));
if(empty($stmt)){
return false;
}
foreach ($stmt as $row) {
// do something with $row
}
return result;
如果此方法返回false,则表示没有搜索结果。
答案 2 :(得分:0)
最后,这是我的代码,我还添加了最多结果数20。
$db = new PDO('mysql:host=localhost;dbname=search','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_POST['tosearchfor']))
{
$query = $db->query('SELECT * FROM searchfor WHERE title LIKE \'%'.$_POST['tosearchfor'].'%\'');
for($i=0; $i<20; $i++)
{
if($result = $query->fetch())
{
echo '<div class="result">
<a class="title" href="#">'.$result['title'].'</a>
<span class="link">
<span style="font-size:15px;position:relative;top:0.8px;padding-right:2px;">‣</span>
https://www.qsoft.com/'.$result['link'].'
</span>
<span class="details">'.$result['details'].'</span>
</div>';
}
else
{
if($i==0)
{
echo 'Sorry, no resluts found for : <strong>'.$_POST['tosearchfor'].'</strong>';
}
}
}
}
else
{
echo 'Error : empty search';
}