2015-04-07 203 views
0

下面的第一個代碼就像一個魅力,我的數據庫中'postpos'表&'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 ['關鍵字']也發佈正確的數據。使用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 ...

雖然我必須通過設置你的處理器的ATTR強調查看你的錯誤的重要性ERRMODE ...

錯誤指出,由於在latin1_swedish_ci上設置了一行,在轉換爲utf8_unicode_ci後行現在返回到SQL中,因此我的整理之間存在衝突...有時,最簡單的東西可以吸引你沒有防範...