-1

我有以下功能:

public function search_exists($word){
   $word=trim($word);
   $query="SELECT * FROM `search` WHERE `word`=$word";
   echo $query;
   $st=$this->pdo->query($query);
   if($st->fetch()){

      return true;
   }
   return false;

}

我想检查行是否存在..问题是我是 pdo 的新手..当我知道有一行时它返回 false..

更新

关于 sql_injection:

我用这个:

  $word=$pdo->quote($_GET['search']);

我想像这样从查询中提取数据:

public function search_exists($word){
       $word=trim($word);
       $query="SELECT search_id FROM `search` WHERE `word`=$word";
       echo $query;
       $st=$this->pdo->query($query);
       while($row=$st->fetch()){

          return $row['search_id'];
       }
       return false;
   }

问题..即使上面的查询也不起作用

4

3 回答 3

1

如果word是字符串类型,您可以尝试用引号括起来:

$query="SELECT search_id FROM `search` WHERE `word` = '$word'";

如前所述,您应该绑定参数,然后您就不会遇到这个问题,因为它会在必要时为您添加引号。它将更好地保护您免受 Sql 注入。

手册中,不要调用fetch(),而是尝试迭代$st

foreach($st as $row) {
  echo $row['search_id'];
}
于 2012-11-20T20:08:43.587 回答
1

首先:使用准备好的语句绑定参数:

public function search_exists($word){
  $word=trim($word);
  $query="SELECT * FROM `search` WHERE `word`=:word";
  echo $query;
  $st=$this->pdo->prepare($query);
  $st->bindValue('word',$word);
  $st->execute();
  if($st->fetch()){

   return true;
  }
  return false;
}

现在您的查询引用没有问题,并且没有 sql 注入的可能性。

那么,另一种可能是使用 count 语句,它是严格等价的

public function search_exists($word){
  $word=trim($word);
  $query="SELECT COUNT(*) FROM `search` WHERE `word`=:word";
  echo $query;
  $st=$this->pdo->prepare($query);
  return $st->fetchColumn() > 0;

}

关于您的更新

如果要获取数据:

 public function search_exists($word){
      $word=trim($word);
      $query="SELECT * FROM `search` WHERE `word`=:word";
      echo $query;
      $st=$this->pdo->prepare($query);
      $st->bindValue('word',$word);
      $st->execute();
      $result = $st->fetch(PDO::FETCH_ASSOC);
      if(isset($result['id_result'])){

       return result['id_result'];
      }
      return false;
    }
于 2012-11-20T20:09:28.383 回答
1

尝试这个

public function search_exists($word){

$word=trim($word);

$query="SELECT COUNT(*) FROM `search` WHERE `word`=$word";

echo $query;

$st=$this->pdo->query($query);

if($st->fetchColumn()>0){
   return true;
}

return false;

}

于 2012-11-20T20:11:10.797 回答