2015-04-07 4 views
0

Первый код ниже работает как шарм и единственная разница между таблицей «postclass» &. Таблица «tpost» в моей базе данных - это имя.PDO-запрос, не возвращающий строки

$keyword = $_POST['keyword']; 
$country = "Thailand"; 
    if($keyword === "English" || $keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ" || $keyword === "english"){ 
     if($keyword === "English" || $keyword === "english"){ 
      $sub_alt = "อังกฤษ"; 
     } 
     if($keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ"){ 
      $sub_alt = "English"; 
     } 
    } 

    if(isset($sub_alt)){ 
     $sql="SELECT * FROM `tpost` WHERE `subject` LIKE :search OR `subject` LIKE :search2 AND `country` LIKE :country AND date >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY id DESC LIMIT 50"; 
    } else { 
     $sql="SELECT * FROM `tpost` WHERE `country` LIKE :country AND `subject` LIKE :search AND date >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY id DESC LIMIT 50"; 
    } 

    $stmt=$dbh->prepare($sql); 
    $stmt->bindValue(':search','%'.$keyword.'%', PDO::PARAM_STR); 

    if(isset($sub_alt)){ 
    $stmt->bindValue(':search2','%'.$sub_alt.'%', PDO::PARAM_STR); 
    } 

    $stmt->bindValue(':country','%'.$country.'%', PDO::PARAM_STR); 
    $stmt->execute(); 


    if ($stmt->rowCount() > 0) { 

    $result = $stmt->fetchAll(); 
    foreach($result as $row){ 
    echo "WORKING"; 
    } 

    } else { 
    echo "NO ROWS RETURNED"; 
    } 

К сожалению, этот снимок должен делать то же самое, но он не возвращает строк. Таблицы в базе данных устанавливаются в InnoDB и UTF-8 и идентичны по структуре. $ _POST ['keyword'] также публикует правильные данные. Использование метода JQuery $ .post() для публикации. Это что-то в этом скрипте, из-за чего BELOW SCRIPT не возвращает строки. Протестировано на Firefox и Chrome. У кого-нибудь есть идея?

$keyword = $_POST['keyword']; 
$country = "Thailand"; 
    if($keyword === "English" || $keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ" || $keyword === "english"){ 
     if($keyword === "English" || $keyword === "english"){ 
      $sub_alt = "อังกฤษ"; 
     } 
     if($keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ"){ 
      $sub_alt = "English"; 
     } 
    } 

    if(isset($sub_alt)){ 
     $sql="SELECT * FROM `postclass` WHERE `subject` LIKE :search OR `subject` LIKE :search2 AND `country` LIKE :country AND `date` >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY `id` DESC LIMIT 50"; 
    } else { 
     $sql="SELECT * FROM `postclass` WHERE `country` LIKE :country AND `subject` LIKE :search AND `date` >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY `id` DESC LIMIT 50"; 
    } 

    $stmt=$dbh->prepare($sql); 
    $stmt->bindValue(':search','%'.$keyword.'%', PDO::PARAM_STR); 

    if(isset($sub_alt)){ 
    $stmt->bindValue(':search2','%'.$sub_alt.'%', PDO::PARAM_STR); 
    } 

    $stmt->bindValue(':country','%'.$country.'%', PDO::PARAM_STR); 
    $stmt->execute(); 


    if ($stmt->rowCount() > 0) { 

    $result = $stmt->fetchAll(); 
    foreach($result as $row) { 
    echo "WORKING"; 
    } 

    } else { 
    echo "NO ROWS RETURNED"; 
    } 
+0

Я предполагаю, что это что-то в заявлении $ sql, но почему первый запрос будет работать, а не второй запрос? –

+0

Также переменная $ sub_alt и оператор if работают правильно ... Srsly должен быть $ sql var ... –

ответ

0

$ dbh-> SetAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);

Добавлено это мой сценарий, чтобы проверить ошибку, совсем забыл, я еще совсем новичок в PHP MYSQL & PDO ...

Хотя я должен подчеркнуть важность проверки ваших ошибок, установив Аттрибут ваших обработчиков к ERRMODE ...

Ошибка была заявлена, что был конфликт между моей сортировкой, поскольку одна строка была установлена ​​на latin1_swedish_ci, после преобразования в utf8_unicode_ci строки теперь возвращались в SQL ... Иногда самые простые вещи могут вас поймать off-guard ...

Смежные вопросы