我正在尝试使用php制作一个facebook风格的用户birtyday功能。但我有一个问题,我的代码没有得到任何结果。我在做错了什么人都可以帮助我?
<?php
public function UserBirthDay($uid,$base_url) {
$uid=mysqli_real_escape_string($this->db,$uid);
$query=mysqli_query($this->db,"SELECT uid,fullname,birth_day,birth_month,username
FROM users WHERE
MONTH(birth_month) = MONTH(NOW()) AND DAY(birth_day) = DAY(NOW());") or die(mysqli_error($this->db));
$data = array();
while($row=mysqli_fetch_array($query, MYSQLI_ASSOC)) {
$data[]=$row;
}
if(!empty($data)) {
// Store the result into array
return $data;
}
?>
和
<?php
$birthDay=$DaySo->UserBirthDay($uid,$base_url);
foreach($birthDay as $data) {
$birthUserFullname=$data['fullname'];
$dbusername = $data['username'];
$bd = $data['birth_day'];
if (date('m-d', strtotime($bd)) == date('m-d')) {
echo '<div class="birthdayUser">
<div class="birthdayuser">
<div class="birthday_icon"></div>
<div class="birthdayUName"><a href="#">'.$birthUserFullname.'</a></div>
</div>
</div> ';
}
}
?>
答案 0 :(得分:1)
你的php条件有问题
尝试以下代码
foreach($birthDay as $data) {
$birthUserFullname=$data['fullname'];
$dbusername = $data['username'];
$bd = $data['birth_month']."-".$data['birth_day']; //concate month and day
if ($bd == date('m-d')) {
echo '<div class="birthdayUser">
<div class="birthdayuser">
<div class="birthday_icon"></div>
<div class="birthdayUName"><a href="#">'.$birthUserFullname.'</a></div>
</div>
</div> ';
}
}
答案 1 :(得分:1)
主要问题在于您的select语句。您不需要在MONTH()
/ DAY()
函数中包含比较中的列。
SELECT uid,fullname,birth_day,birth_month,username
FROM users
WHERE MONTH(birth_month) = MONTH(NOW()) AND DAY(birth_day) = DAY(NOW())
您的专栏birth_month
包含该月份的2位数字表示。 MONTH(NOW())
将返回该月的2位数表示。因此,您无需在MONTH()
MySQL方法中包装列。同样适用于birth_day
比较。
SELECT uid,fullname,birth_day,birth_month,username
FROM users
WHERE birth_month = MONTH(NOW()) AND birth_day = DAY(NOW())
另外,正如塔德曼的评论所指出的那样;
警告:使用mysqli时,您应该使用parameterized个查询和
bind_param
来向查询中添加用户数据。 不要使用手动转义和字符串插值或连接来完成此操作,因为您将创建严重的SQL injection bugs。意外未转发的数据是一个严重的风险。
我在这里重复这个建议,因为很多人都会劝你听。