如果用户的积分为10,000,我会尝试为用户颁发徽章。表格中有一个名为badge1的字段,其默认值设置为已锁定和一个点行。我正在运行如果声明,如果用户点数为10,000,则将badge1行从锁定更新为解锁。我的代码似乎是正确的但它既没有更新字段也没有显示任何错误。
<?php
$db = new PDO('mysql:host=hostname;dbname=databasename;charset=UTF-8', 'username', 'password');
$username = $_SESSION['username'];
$q = "SELECT Points FROM login_users WHERE username ='$username'");
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];
if($Points == "10000") {
$awardBadge = $db->exec("UPDATE login_users SET badge1=unlocked WHERE username=?");
$Points->execute(array($username))
} else {
print "";
}
?>
更新
我设法让它工作..但是问题是我将旧的sql转换为PDO有点新,所以这不是很安全,但这是有效的:
<?php
$connect = mysql_connect("host","username","password");
mysql_select_db("databasename");
$username = $_SESSION['jigowatt']['username'];
$q = "SELECT Points FROM login_users WHERE username = ('$username')";
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$Points = $row['Points'];
?>
// Place somewhere
<?php
if($Points >= "10000") {
$result = mysql_query("UPDATE login_users SET maneki='unlocked' WHERE username='$username'");
} else {
print "Badge has not been unlocked";
}
?>
答案 0 :(得分:2)
"10000" string
应为10000 int
而且,您也可以在这里做出选择。您正在使用两种类型的设置mysql-database连接。老式mysql_function()
方式和新幻想PDO method
。
我认为使用PDO版本更安全,因为较新的PHP版本将不再支持旧方法......那......它看起来很脏; P
试试这个:
<?php
session_start();
$dbSession = new PDO('mysql:host=***;dbname=***', '***', '***');
$selectQuery = $dbSession->prepare('
SELECT `User`.`Points`
FROM `login_users` AS `User`
WHERE `User`.`username` = :username
');
$selectQuery->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR);
$user = $selectQuery->fetch(PDO::FETCH_ASSOC);
if ( !empty($user) && $user['Points'] == 10000 ) {
$updateQuery = $dbSession->prepare('
UPDATE `login_users`
SET `badge1` = \'unlocked\'
WHERE `username` = :username');
$updateQuery->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR);
$updateQuery->execute();
}
?>
有用的资源:
答案 1 :(得分:1)
更好地检查&gt; = 10000并且还没有获奖。这也可以在SQL中完成,因此您不需要PHP中的逻辑。
UPDATE login_users SET badge1=unlocked WHERE points >= 10000 and badget1 <> unlocked
答案 2 :(得分:1)
试试这个if($Points == 10000)
代替if($Points == "10000")
mysql_query()
向与指定link_identifier关联的服务器上当前活动的数据库发送唯一查询(不支持多个查询)。
答案 3 :(得分:1)
if($Points==10000){
$awardBadge = $db->prepare("UPDATE login_users SET badge1=unlocked WHERE username=?");
$awardBadge->execute(array($username));
}
答案 4 :(得分:1)
问题是由$point
值引起的,该值实际上不等于10000
,而是NULL
。
因此我建议在这种情况下始终使用var_dump()
来获取变量的实际值。
答案 5 :(得分:1)
一个提示:在编写php代码之前检查PDO文档!你可以在同一时间使用PDO和mysql命令进行同样的工作!为什么???