我在php中使用PDO。但是,当我的查询有任何关键字像“'”意味着连字符它打破并通过一个错误。 我准备通过互联网,并找到解决方案绑定与查询参数,它工作正常。 但问题是我在循环中构建查询,我无法在循环内绑定参数。 这是代码,我用空间拆分数组,并对每个关键字运行查询。 前3个单词将只有像查询和更多然后3个单词我正在使用循环来连接所有数组元素和相同的多于6个单词我正在使用MATCH查询。 有没有什么办法来逃避这个连字符,或者我们如何在我的情况下使用循环绑定参数?在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'=> $ keyword))''中引用''。把东西添加到字符串很容易,如果你同时向你的数组添加东西,它们将保持同步。 – tadman