PDO准备NOT IN或<>多语言

时间:2014-01-31 19:31:49

标签: php mysql pdo

几个小时我正努力做到这一点。 好吧我在第一种情况下有两种语言在url中没有变量吗?lang =它是基本语言和检查语言变量lang的函数,Do,如果url中的变量存在,无论其值是什么,设置全局变量$ lang到“en”else为NULL。现在我进入数据库我有列郎,我现在需要从中获取数据。公共变量if为true表示我需要获得所有主题为pulic且在数据库列中“可见”值为2.如果不可见而不是值为1.

  1. 获取所有在行lang中没有值“en”的公开项目
  2. 获取lang时可见的所有公共项目!= NULL(如果行lang为值“en”
  3. 如果公开= = false&& lang == null获取所有可见的行2和lang列为空
  4. 获取所有项目,如果公开== false&& lang!= null如果列lang中的值为“en”,则获取所有项目。这就是我所需要的一切。但神秘的是它不起作用。 我的代码。

    function get_all_subjects($public = true,$lang = NULL){
    $db = connect_db();
    $query = "SELECT * "; 
    $query .= "FROM subjects ";
    if($public && $lang == NULL){
        $query .= "WHERE visible =:visible ";
        $query .= "AND WHERE lang =:lang ";
    }elseif($public && $lang != NULL){
        $query .= "WHERE visible =:visible ";
        $query .= "AND WHERE lang =:lang ";
    }elseif(!$public && $lang != NULL){
        $query .= "WHERE lang =:lang ";
    }elseif(!$public && $lang == NULL){
        $query .= "AND WHERE lang =:lang ";
    }
    $stmt = $db->prepare($query);
    if($public && $lang == NULL){
        $stmt->bindValue(':visible', 2, PDO::PARAM_INT);
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }elseif($public && $lang != NULL){
        $stmt->bindValue(':visible', 2, PDO::PARAM_INT);
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }elseif(!$public && $lang != NULL){
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }elseif(!$public && $lang == NULL){
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }
     if($stmt->execute()){
    return $stmt;
     }else{
    return NULL;
    }
    }
    

    我认为有必要放入NOT IN:lang或<>:lang或!=但我现在还没有......没有什么能帮到我的头疼,我很累。

  5. 编辑。只能在“en”中使用public和!public“versions”。在基本语言中public = true和public = false我得到了错误致命错误:在我调用此函数的其他函数中的非对象上调用成员函数fetch()。在第2行 我想我知道..我不需要,首先如果声明:lang。但是怎么样? $all_subjects = get_all_subjects($public,$lang); $subject = $all_subjects->fetch(PDO::FETCH_ASSOC)

1 个答案:

答案 0 :(得分:0)

解决。 一点研究mysql

function get_all_subjects($public = true,$lang = NULL){
    $db = connect_db();
    $query = "SELECT * "; 
    $query .= "FROM subjects ";
    if($public && $lang == NULL){
        $query .= "WHERE NOT lang =:lang ";
        $query .= " AND visible =:visible ";
    }elseif($public && $lang != NULL){
        $query .= "WHERE visible =:visible ";
        $query .= "AND lang =:lang ";
    }elseif(!$public && $lang != NULL){
        $query .= "WHERE lang =:lang ";
    }elseif(!$public && $lang == NULL){
        $query .= " WHERE NOT lang =:lang ";
    }
    $stmt = $db->prepare($query);
    if($public && $lang == NULL){
        $stmt->bindValue(':visible', 2, PDO::PARAM_INT);
        $stmt->bindValue(':lang','en', PDO::PARAM_STR);
    }elseif($public && $lang != NULL){
        $stmt->bindValue(':visible', 2, PDO::PARAM_INT);
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }elseif(!$public && $lang != NULL){
        $stmt->bindParam(':lang',$lang, PDO::PARAM_STR);
    }elseif(!$public && $lang == NULL){
        $stmt->bindValue(':lang','en', PDO::PARAM_STR);
    }
if($stmt->execute()){
    return $stmt;
}else{
    return NULL;
}

}