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

我这样称呼查询:

获取成员(0);(取来女孩很好)

获取成员(1);(把伙计们抓得很好)

获取成员();(只取男生)

我相信 $sex = (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");
4

4 回答 4

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 执行,因此$sex将包含1. 您不能以这种方式进行,因为您的最终字符串将是"SELECT username FROM users WHERE sex = 1"

尝试类似djot 的建议

于 2013-09-25T01:39:27.607 回答
1

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

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 回答
0

(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);
}
于 2013-09-25T01:58:02.110 回答