2012-02-10 13 views
0

でエスケープされた文字列を見つけることができません。私はMairiesを探ししようとした場合は、私は、このような文字列を持っているデータベース内のデータベース

$array=array("Caisse primaire d'assurance maladie","Mairies","Hotels"); 
$in_list = "'".implode("','",$array)."'"; 

$stmt = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements where type IN ('.$in_list.')'); 
$stmt->execute(); 
$stmt->bind_result($libelle,$activite,$adresse,$tel,$lat,$lng);//the $stmt is empty 

今、のみ、またはHotelsだけそれは私に結果を返します。これは、アポストロフィが、準備されたクエリが正しく実行されないことを意味します。これをどうすれば解決できますか?

+0

'with'(2つの一重引用符)を置き換えて試してみてください。 –

+2

はい、アポストロフィが原因でクエリに構文エラーが発生しています。それは準備された声明が避けなければならないものです。残念ながら、あなたは準備されたステートメントを使用していません。通常の古いSQLインジェクションの傾向があります。どのMySQL拡張機能を特に使用していますか? MySQLi? PDO? – deceze

+0

@Thit:どこが正確に?? – Luca

答えて

1

私はこれをどのように修正することができます。 本当プリペアドクエリを使用することにより

、ちょうどそれはをからかっていません。

または、文字列をエスケープします。

1

mysqli_real_escape_stringを使用すると、最初にクエリからエスケープすることができます。

+1

クエリではなく、ただのパラメータ – soju

1

"Caisse primaire d'assurance maladie"という文字列には一重引用符があります。この一重引用符は、突然SQL文字列を終了させるかもしれません。
私はあなたがそれが正しいかどうかを確認するために最初のSQL文を印刷することをお勧めします。:)

関連する問題