我有一个函数,可以从我的数据库中选择男性、女性或两种性别。
函数如下所示:
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);
}