0

データベースから男性、女性、または両方の性別を選択する機能があります。

関数は次のようになります。

function getMembers($sex = null) {

    if (is_null($sex)) {
        $sex = (0 || 1);
    }

    $query = $conn->prepare("SELECT username FROM users WHERE sex = :sex");
    $query->execute(array(
        ':sex' => $sex
    ));

    $members_results = $query->fetchAll(PDO::FETCH_ASSOC);
}

私はそのようにクエリを呼び出します:

getMembers(0); (女の子を元気に連れて行きます)

getMembers(1); (元気にみんなを連れてきます)

getMembers(); (男だけを取得します)

$sex = (0 || 1); だと思います。行が間違っています。

どのように修正しますか?ありがとう

追伸: 私のクエリは実際には次のようになります。

    $query = $conn->prepare("SELECT picture_path, profile_picture, username, last_visit, signup_date, settings, sex FROM tusers 
                WHERE profile_picture IS NOT NULL
                AND settings LIKE '1,%' 
                AND sex = :sex
                AND  last_visit BETWEEN CURDATE() - INTERVAL 9 DAY AND CURDATE() 
                AND signup_date < CURDATE() - INTERVAL 10 DAY 
                ORDER BY RAND()
                LIMIT 15");
4

4 に答える 4

1

次のように、3 つの関数を個別に作成してみませんか。

function getMaleMembers()
function getFemaleMembers()
function getAllMembers()

そして、それらのそれぞれに異なる mysql_query を配置します..例のように:

$query = $conn->prepare("SELECT username FROM users WHERE sex = '1'");
$query = $conn->prepare("SELECT username FROM users WHERE sex = '0'");
$query = $conn->prepare("SELECT username FROM users");

これは実装が非常に簡単で、より理にかなっています。

于 2013-09-25T01:43:54.887 に答える
1

これは最善の解決策ではありませんが、要点を理解する必要があります。

(実際には、クエリ文字列をいくつかの部分に分割する方がより実用的です。必要な列、値、場所、およびバインディングを if/loop/whatever で混合します。)

<?php

function getMembers($sex = null) {

    if (is_null($sex)) {
      $query = $conn->prepare("SELECT username FROM users;");
      $query->execute();
    }
    else {
      $query = $conn->prepare("SELECT username FROM users WHERE sex = :sex;");
      $query->execute(array(':sex' => $sex));
    }
    $members_results = $query->fetchAll(PDO::FETCH_ASSOC);
}

?>
于 2013-09-25T01:38:19.887 に答える
1

この行は$sex = (0 || 1);PHP によって実行されるため、. 最終的な文字列が$sex1"SELECT username FROM users WHERE sex = 1"

提案されたdjotのようなものを試してください

于 2013-09-25T01:39:27.607 に答える
0

(0 || 1) は 0 OR 1 を意味し、毎回 1 を返します。完全な回答はこちら: http://www.php.net/manual/en/language.operators.php#43111

目的の機能を実現するには、コードを次のようにする必要があります。

function getMembers($sex = null) {

    if (is_null($sex)) {
        $query = $conn->prepare("SELECT username FROM users");
        $query->execute();
    } else {
        $query = $conn->prepare("SELECT username FROM users WHERE sex = :sex");
        $query->execute(array(
            ':sex' => $sex
        ));
    }
    $members_results = $query->fetchAll(PDO::FETCH_ASSOC);
}
于 2013-09-25T01:58:02.110 に答える