我已經給出了這個代碼來給出+1點,但它不能正常工作。mysql更新查詢的遞增值
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
的$分變量是user's點現在..我希望它加一個吧..所以舉例來說,如果他有一個像5分,應該是5 + 1 = 6 .. 但它沒有,它只是改變爲1
我做錯了什麼?謝謝
我已經給出了這個代碼來給出+1點,但它不能正常工作。mysql更新查詢的遞增值
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
的$分變量是user's點現在..我希望它加一個吧..所以舉例來說,如果他有一個像5分,應該是5 + 1 = 6 .. 但它沒有,它只是改變爲1
我做錯了什麼?謝謝
你也可以只做到這一點:
mysql_query("
UPDATE member_profile
SET points = points + 1
WHERE user_id = '".$userid."'
");
@Steve對於知道PDO是什麼的人來說,您的評論聽起來很聰明,但對於我只是潛入PHP/MySQL的人而言,它並沒有真正發現這件事。 PDO是否使代碼更小或更優雅?如果是這樣,請編輯答案或張貼你自己的地方,告訴你如何使用PDO更好。謝謝。 – 2013-01-21 19:06:47
@CamiloMartin我也很好奇。我發現這有幫助http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ – 2013-01-26 06:41:09
@CamiloMartin [php.net手冊](http://php.net /manual/en/function.mysql-query.php)mysql_query的頁面有如下注意: 從PHP 5.5.0開始,這個擴展已被棄用,並且將來會被刪除。相反,[MySQLi](http://www.php.net/manual/en/book.mysqli.php)或[PDO_MySQL](http://www.php.net/manual/en/ref.pdo-應該使用mysql.php)擴展名。另請參見[MySQL:選擇API](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)指南和[相關FAQ](http://www.php.net/manual /en/faq.databases.php#faq.databases.mysql.deprecated)以獲取更多信息。 – aland 2013-03-24 21:55:08
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
如果我使用變量而不是值= 1,該怎麼辦?我應該這樣做「points = points + $ variable」?或「points = points +'$ variable'」 – 2013-05-20 06:12:18
取出'
的point
各地:
mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'");
你在你的原始查詢「鑄造」的整數值串...
爲什麼你不讓PHP做這項工作?
"UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'"
好點,但要小心併發環境,因爲DB值可能在此期間發生了變化。 – 2013-12-30 21:00:30
謝謝@VincentNikkelen,你撞上了頭部。併發! – 2016-11-12 02:10:20
如果你使用這個方法,你應該先選擇數據,這意味着對該行的額外訪問。如果您只需要更新該值,這不是一種好的方法。 – andufo 2017-06-05 06:53:51
你可以做到這一點,而不必查詢實際的點數,所以它會在腳本執行過程中節省一些時間和資源。
mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");
否則,你是做錯了是你通過老的分額作爲字符串(points='5'+1
),並且不能將號碼添加到字符串。 ;)
希望我不會在我的第一篇offtopic,但我想擴大一點整數的鑄造字符串作爲一些受訪者似乎錯了。
由於此查詢中的表達式使用算術運算符(加號+),因此MySQL會將表達式中的任何字符串轉換爲數字。
爲了演示,下面將產生結果6:在MySQL
SELECT ' 05.05 '+'.95';
字符串連接需要CONCAT()函數,所以這裏沒有歧義和MySQL轉換字符串浮並將它們相加。
我實際上認爲最初的查詢不起作用的原因很可能是因爲$ points變量實際上並未設置爲用戶的當前點。它被設置爲零,或者未設置:MySQL會將空字符串轉換爲零。爲了說明,下面將返回0:
SELECT ABS('');
就像我說的,我希望我沒有太偏離主題。我同意Daan和Tomas爲這個特殊問題提供了最好的解決方案。
+1 compton非常好的觀點,你是對的演員工作,在那裏引號或不。歡迎來到SO! – 2010-02-13 22:52:26
此外,以 「增量」 的字符串,當更新,使用CONCAT
update dbo.test set foo=CONCAT(foo, 'bar') where 1=1
誰需要更新的字符串和數字 SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:[email protected]+1);
您應該使用PDO來防止SQL注入風險。
您可以連接到數據庫這樣的:
try {
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=xxxx;dbname=xxxx', 'user', 'password', $pdo_options);
$bdd->query('SET NAMES "utf8"');
} catch (PDOException $e) {
exit('Error');
}
無需查詢數據庫來獲得點數。您可以直接在更新查詢中增加(points = points + 1
)。
(注:另外,這不是一個好主意,因爲你首先需要選擇數據和值可以改變,如果其他用戶更新,它增加與PHP的值。)
$req = $bdd->prepare('UPDATE member_profile SET
points = points + 1
WHERE user_id = :user_id');
$req->execute(array(
'user_id' => $userid
));
我有一個類似的問題,然後意識到該字段的默認類型是'NULL',將其更改爲0,一切都很好。 – Azmeer 2017-02-01 08:58:55