2016-03-27 4 views
0

mysqli関数を使って特定の文字列を '(アポストロフィ)で検索すると、結果は決して見つかりませんが、databseとまったく同じです。Mysqliはアポストロフィで動作しませんか?

たとえば、私はdawn'sを検索します。これはreal_escapeから:dawn \ 'sにエスケープされ、これはデータベースと同じです(データベースにエスケープされます)。しかしそれでも私は結果を得られません。正しくないこの仕事をするのはなぜ

 $mysqli = goConnect(); 
     $query = $mysqli->real_escape_string($query); 
     if(!($stmt = $mysqli->prepare("SELECT * FROM movies WHERE title LIKE '%$query%'"))){ 
      http_response_code(400); 
      echo "<p class='results'>Cannot prepare the statement, please try again later.</p>"; 
     } 
     echo $query; 
     if($stmt->execute()){ 

これは私が使用するコードですか?

答えて

0

MysqliにはLIKE演算子がなく、Mysql LIKEはであり、アポストロフィを含めて文字で動作します。

これはデータベースと同じです(データベースにもエスケープされています)。

これは間違っていることです。データベース内で同じであってはいけません。それはそのままとして保存する必要があります。

さらに、常にプレースホルダを使用してクエリ内の変数を置き換える必要があります。あなたがそれらを使っていたなら、あなたはこのような問題に遭遇することは決してありませんでした。

だから、最初

$mysqli = goConnect(); 
$stmt = $mysqli->prepare("SELECT * FROM movies WHERE title LIKE ?"); 
$query = "%$query%"; 
$stmt->bind_param("s", $query); 
$stmt->execute(); 

にこのコードを変更し、それをデータに単一の余分な文字を追加しないで作るために、それに応じて挿入コードを変更します。

+0

4行目($ srmr)のコードに入力ミスがありますが、それでもうまくいきました。ありがとうございました! – Joey

関連する問題