0

このmysql検索を実行したい:

 SELECT ida, MotsClef FROM Actes WHERE MATCH (MotsClef ) 
 AGAINST ('+"dette" +"plège"' IN BOOLEAN MODE);

php を使用して、正規表現を使用して +" および " を $_POST 経由で受け取った式に追加し、var_dump が次のようになるようにします。

'motcle' => string '+"dette" +"plège"'

だからそれもいい。ただし、私は PDO クラスを使用して準備済みステートメントを使用しており、そのための次のコードがあります。

 if($r['motcle']!=''){
     $motclef = $r['motcle'];
     $demMotsClef = " AND WHERE MATCH (MotsClef ) AGAINST (:motsclef IN BOOLEAN MODE) ";
    }
    else{
            $demMotsClef='';
    }

よりも:

 $f = "SELECT COUNT(*) FROM Actes, Bibliographie WHERE id = idBiblio".$demMotsClef;

$demande = $this->prepare($f);

if($r['motcle']!=''){$demande->bindValue(':motsclef',stripslashes($motclef));}

$demande->execute(); //the error is on this line//

SQL 構文にエラーがあるという MySQL エラー メッセージが表示されます。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:
Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the 
right syntax to use near 'WHERE MATCH (MotsClef ) AGAINST 
('+\"dette\" +\"plège\"' IN BOOLEAN MODE) AND a' at line 1' in 
/Library/WebServer/Documents/messources/actions.class.php on line 547.

mysql 構文のエラーは、スラッシュが追加されているため、ストリップスラッシュを使用していることです (機能しません)。

それを解決する方法についてのアイデア-他のすべてのmysqlリクエストを台無しにするため、php.iniまたは.php関数のini設定を変更したくありません。

ありがとう!

4

1 に答える 1