2016-04-25 3 views
0

私は少しajax質問結果システムをやっています。ユーザーがテキストエリアに何かを入力すると、結果が自動的に検索されて出力されます。文字列に文字列が含まれている場合に引用符を付ける前にバックスラッシュを追加する - PHP

問題は、ユーザーが ""または "'を含む質問を入力するたびに検索が失敗するという問題です。 ""文字列の中にバックスラッシュを追加する方法はありますか?それで無視されますか?

"または"を無視するフィルタはありますか?

データベースの質問には質問が含まれているので、引用符で検索する必要があります。

は、ここでは、コードです:

$q = $_POST['q']; 
// for every " or ' in $q add \ before it 
$results = array(); 
$result = array(); 
$count = 0; 
$stmt = $dbh->prepare("SELECT result FROM quest WHERE quest LIKE '".$q."%'"); 
if($stmt->execute()){ 
    $result = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $count= $stmt->rowCount(); 
} 
if($result != NULL){ 
    foreach($result as $part){ 
     foreach($part as $item){ 
      $results[] = $item; 
     } 
    } 
    echo htmlentities($results[0], ENT_QUOTES, "UTF-8"); 
} 
+0

あなたは準備文を使用する必要があります。そのためです。 MySQLはそれについて不平を言っていますが、チャンスを与えているわけではありません;-) –

+0

私はこれが重複した@Fred -ii-であることに同意しません。私はあなたの意図が最高だと知っていますが、誰かがSQLインジェクションとほぼ同じことを気付かずに(このように)この種の質問を探すでしょう:) –

+0

*私は6分後に正しいとマークします - DawidZbiński5分前 "* - 重複は何ですか、熱帯雨林から猿を連れて来ますか?あなたが受け入れる答えから、これをhttp://php.net/manual/en/pdo.prepared-statements.phpと呼びますか?そしてdupeからhttp://stackoverflow.com/a/60496/。 –

答えて

0

を使用してみてください、あなたはこの問題を持っている理由です。準備文を正しく使用すると、この問題が解決されます。これのためのドキュメントは実際にはかなり良いです。

http://php.net/manual/en/pdo.prepared-statements.php

EDIT:それらを正しく使用する方法を学ぶために時間がかかるしてください。そうでない場合は、コードはSQLインジェクションの影響を受けます。

+0

今私は参照してください。手伝ってくれてありがとう。私は6分で正しいとマークします。 –

0

はあなたが正しく準備されたステートメントを使用していないaddslashes()機能

関連する問題