我想讓cronjob函數將所有用戶的資金更新爲1,而只有第一行增加並增加9.(有10個用戶)。我嘗試交換for循環的while循環,並得到相同的結果。我嘗試將$ database-> fetch轉換爲mysqli_fetch_array,並得到相同的結果,並將其轉化爲mysqli_fetch_all,爲所有數據庫變量提供「注意:未定義索引://變量名稱\」。解決方法:php while-loop只更新第一行結果
class allusers2
{
public $id;
public $level;
public $money;
private $database;
// Methods (functions)
public function __construct($allusers_id, $database)
{
$this->database = $database;
$allusers_id = (int)$allusers_id;
$result = $this->database->query("SELECT * FROM `users` WHERE `id`='$allusers_id'");
if($this->database->num_rows($result) == 0) {
throw new Exception("allusers does not exist!");
}
$allusers = $this->database->fetch($result);
$this->id = $allusers['id'];
$this->level = $allusers['level'];
$this->money = $allusers['money'];
}
public function update()
{
$this->database->query("UPDATE `users` SET
`level` = '{$this->level}',
`money` = '{$this->money}'
WHERE `id`='{$this->id}'");
}
}
function cronjob()
{
global $database;
global $player;
global $self_link;
require('allusers2.php');
$result = $database->query("SELECT id FROM `users`");
$allusers_id = $database->fetch($result);
$allusers2 = new Allusers2($allusers_id, $database);
while($allusers_id = $database->fetch($result)) {
$allusers2->money += 1;
$allusers2->update();
}
}
編輯:下面的代碼解決了這個問題。
$database->query("UPDATE users SET money = money + 1");
你應該開始正確縮進你的代碼,使其可讀性。 – Cfreak
小建議。儘量避免使用全局變量。 – nix9
_「我想讓cronjob函數將所有用戶的錢更新爲1」_ - 'UPDATE users SET money = money + 1'並完成。沒有選擇,沒有必要的循環。 (假設通過「所有」你實際上意味着_all_。) – CBroe