如果pdo存在行,如何识别行

时间:2012-11-20 20:04:32

标签: php pdo

我有以下功能:

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 ..当我知道有一行..hmm

更新

关于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;
   }

问题..甚至上面的查询也无效

3 个答案:

答案 0 :(得分:1)

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

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

如上所述,您应该binding the parameters,然后您就不会遇到此问题,因为它会在必要时为您添加引号。它可以更好地保护你免受Sql注入。

manual,而不是调用fetch(),尝试重复$st

foreach($st as $row) {
  echo $row['search_id'];
}

答案 1 :(得分:1)

首先:使用prepared语句绑定参数:

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;
    }

答案 2 :(得分: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;

}