2015-04-07 208 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中,因此我的整理之间存在冲突...有时,最简单的东西可以吸引你没有防范...