私はPHPでPDOを使用しています。しかし、クエリに "''のようなキーワードがあると、ハイフンが壊れてエラーが発生します。 私はインターネット上で準備ができており、クエリでパラメータをバインドするソリューションを見つけても問題ありません。 しかし、問題は私がループ内のクエリを構築していると私はループ内のパラメータをバインドすることができません。 ここでは、配列をスペースで分割してすべてのキーワードに対してクエリを実行するコードを示します。 最初の3つの単語は同じようなクエリと3つ以上の単語を持っています。私はすべての配列要素を連結するためにループを使用しています。 ハイフンをエスケープする方法はありますか、私の場合はループを使用してパラメータをバインドする方法はありますか?PHPでPDOでパラメータをバインドする
$keyword = ($_POST['keyword']);
$keyword_array = split(' ',$keyword);
/* Query For first Three Words */
if(count($keyword_array)<=3){
$sql = "SELECT * FROM faq WHERE question LIKE '%$keyword%' limit 14";
}
/* Query through all array when words are greater then 3 */
if(count($keyword_array)< 6){
$sql = "SELECT * FROM faq WHERE question ";
for($i = 0 ; $i<count($keyword_array); $i++){
if($i==0){
$sql.=" LIKE '%$keyword_array[$i]%'";
}else{
$sql.=" or question LIKE '%$keyword_array[$i]%' ";
}
}
$sql .= " ORDER BY question ASC LIMIT 0, 8";
}
/* Appl FULL TEXT in natual language mode once we have enough phrase */
else if(count($keyword_array)>=6){
$sql = "SELECT * FROM faq WHERE ";
for($i = 0 ; $i<count($keyword_array); $i++){
if($i==0){
$sql.=" MATCH (answer) AGAINST ('$keyword_array[$i]' in natural language mode) ";
}else{
$sql.=" or MATCH(answer) AGAINST('$keyword_array[$i]' in natural language mode) ";
}
}
$sql .= " limit 0,5";
}
$execute_faq_query = $conn->query($sql);
$execute_faq_query->setFetchMode(PDO::FETCH_ASSOC);
while ($list = $execute_faq_query->fetch()){
}
ループは、SQLステートメントを作成し、単一のSQLクエリを実行する必要があります。 –
はい、私はそれを試してみましたが、私はPDOで新しくなっているので問題が発生しています。 – Bilal
PDOは ':keyword'のような名前付きプレースホルダをサポートしています。このプレースホルダは' execute(array( ':キーワード' => $ keyword))中に参照できます。文字列に物を追加するのは簡単ですし、配列に物事を追加すると同時にそれらは同期していきます。 – tadman