在我的数据库中,我有 1 个名为"members"的表。此表只有两个字段:"id"和"尝试次数"。只有一行,"id"设置为 1,"尝试次数"设置为 0。
每当运行此脚本时,我都想在表的"尝试次数"中添加 1。运行一次后,"尝试"应为 1,两次应为 2,依此类推。
我想将变量$attempts设置为表的"尝试"设置的任何内容。
如果$attempts值为 3 或更多,我希望它回显"某物",然后将表的"尝试"值更改为 0。
这是我已经拥有的,我该怎么做?我是 php 的新手,正在浏览手册。任何提示或帮助表示赞赏。谢谢大家:)
$attempts = mysql_query("SELECT attempts FROM members WHERE id=1");
if (++$attempts >= 3) {
echo "SUCCESS!!";
$attempts = 0;
}else {
echo "3 attempts haven't been made yet...";
}
$sql = "UPDATE members SET attempts='$attempts' WHERE id=1";
向WHERE
子句添加一个条件并更改条件语句:
旁注:这当然是看到"尝试"列是 int 类型。
$attempts = mysql_query("SELECT attempts FROM members WHERE id=1 AND attempts >=3");
if($attempts) {
echo "SUCCESS!!";
$attempts = 0;
}
else {
echo "3 attempts haven't been made yet...";
}
$sql = mysql_query("UPDATE members SET attempts='$attempts' WHERE id=1");
旁注:您可能希望将 UPDATE 放在else{...}
并SET attempts = attempts +1
将其增加 1
或重置为零SET attempts='$attempts'
。
我建议将
mysqli
与准备好的语句一起使用,或者将PDO与准备好的语句一起使用,它们更安全。另外,您使用的是已弃用的MySQL API。
编辑:
正如OP所述(来自评论):
上面的答案不起作用,因为mysql_query会导致$attempts
回显资源 ID #3,而不是实际的表值。
但是,您可以改用mysql_fetch_assoc来解决此问题。
您需要添加的所有内容都在这里:链接 我已经包含了下面的工作代码,并选择了它作为答案,因为它让我走上了正确的轨道。
非常感谢弗雷德帮助我。
$sql = "SELECT attempts FROM members WHERE id=1";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
$attempts = $row["attempts"];
}
等。。
编辑#2,测试
它检查"尝试"行是否超过 3。如果是,则将其重置为 0。
如果不是,它将与"id"相关的行增加 1。
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($Link->connect_errno > 0) {
die('Connection failed [' . $Link->connect_error . ']');
}
$query = mysqli_query($Link, "SELECT attempts FROM members WHERE id=1");
while ($row = mysqli_fetch_assoc($query)) {
if($row['attempts'] >=3) {
echo "SUCCESS!!";
$attempts = 0;
$sql = mysqli_query($Link, "UPDATE members SET attempts='$attempts' WHERE id=1");
}
else {
echo "More than 3 attempts haven't been made yet..., row has been incremented by 1.";
$sql = mysqli_query($Link, "UPDATE members SET attempts= attempts +1 WHERE id=1");
}
} // brace for while loop