选择“MySQL 行”,而不考虑列的数据


Select MySQL rows regardless of a column's data

我有一个函数,可以从我的数据库中选择男性、女性或两种性别。

函数如下所示:

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);
}

我这样调用查询:

获取成员(0);(把女孩们抓起来了)

获取会员(1);(把家伙拿起来很好)

获取成员();(只取家伙)

我相信$= (0 || 1); 行是错误的。

你会如何解决它?谢谢

Ps.:我的查询实际上看起来像:

    $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");

这不是最好的解决方案,但你应该明白这一点。

(实际上,将查询字符串分成几个部分会更实用 - 通过 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);
}
?>

$sex = (0 || 1);行由 PHP 执行,因此$sex将包含 1 .你不能继续这样做,因为你的最终字符串将被"SELECT username FROM users WHERE sex = 1"

尝试像 djot 建议的那样

为什么不分别创建三个函数,例如:

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");

这将非常容易实现并且更有意义。

(0 || 1) 表示 0 或 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);
}