-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 に答える