2010-02-13 13 views
98

मैंने +1 कोड देने के लिए यह कोड बनाया है, लेकिन यह ठीक से काम नहीं करता है।mysql अद्यतन क्वेरी में वृद्धि मूल्य

mysql_query(" 
    UPDATE member_profile 
    SET points= ' ".$points." ' + 1 
    WHERE user_id = '".$userid."' 
"); 

$ अंक चर उपयोगकर्ता की अंक अभी है .. मैं इसे करना चाहते हैं के साथ साथ यह करने के लिए एक .. तो उदाहरण अगर वह 5 अंक की तरह था, यह 5 + 1 = 6 होना चाहिए .. लेकिन यह नहीं है, यह सिर्फ 1

मैंने क्या गलत किया है? धन्यवाद

+1

मैं एक था इसी तरह के मुद्दे को तब महसूस हुआ कि फ़ील्ड का डिफ़ॉल्ट प्रकार 'न्यूल' था, इसे 0 पर बदल दिया गया और सब ठीक था। – Azmeer

उत्तर

222

आप, साथ ही ऐसा कर सकता है:

mysql_query(" 
    UPDATE member_profile 
    SET points = points + 1 
    WHERE user_id = '".$userid."' 
"); 
+58

@ स्टेव आपकी टिप्पणी किसी ऐसे व्यक्ति के लिए चालाक लग सकती है जो पीडीओ क्या जानता है, लेकिन मेरे लिए जो PHP/MySQL में डाइविंग कर रहा है, यह वास्तव में इस मामले में बहुत सारी रोशनी नहीं चमकता है। क्या पीडीओ उस कोड को छोटा या अधिक सुरुचिपूर्ण बनाता है? यदि ऐसा है, तो कृपया उत्तर संपादित करें या अपने आप में से एक पोस्ट करें जहां आप दिखाते हैं कि यह पीडीओ के साथ बेहतर कैसे है। धन्यवाद। –

+5

@ कैमिलो मार्टिन मैं भी उत्सुक था। मुझे यह सहायक पाया गया http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ –

+8

@CamiloMartin [php.net मैनुअल] (http://php.net mymanql_query के लिए /manual/en/function.mysql-query.php) पृष्ठ में निम्न नोट है: यह एक्सटेंशन 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: एक एपीआई चुनना] (http://www.php.net/manual/en/mysqlinfo.api.choosing.php) गाइड और [संबंधित एफएक्यू] (http://www.php.net/manual अधिक जानकारी के लिए /en/faq.databases.php#faq.databases.mysql.deprecated)। – aland

6
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'" 
+1

क्या होगा यदि मैं मान = 1 के बजाय चर का उपयोग करता हूं? क्या मुझे इसे इस तरह से करना चाहिए "अंक = अंक + $ चर"? या "अंक = अंक + '$ चर' ' –

1

' निकालें point चारों ओर:

mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'"); 

आप "कास्टिंग" कर रहे हैं आपकी मूल क्वेरी में स्ट्रिंग के लिए एक पूर्णांक मान ...

0

तुम क्यों न दें PHP नौकरी करते हैं?

"UPDATE member_profile SET points= ' ". ($points+1) ." ' WHERE user_id = '".$userid."'" 
+5

अच्छा बिंदु, लेकिन एक समवर्ती वातावरण में सावधान रहें क्योंकि इस दौरान डीबी मूल्य बदल सकता है। –

+1

धन्यवाद @ विन्सेंटनिकेलकेन, आपने सिर पर नाखून मारा। संगामिति! –

+1

यदि आप इस विधि का उपयोग करते हैं, तो आपको पहले डेटा चुनना चाहिए, जिसका अर्थ पंक्ति में अतिरिक्त पहुंच है। यदि आपको केवल मूल्य को अपडेट करने की आवश्यकता है तो यह जाने का तरीका नहीं है। – andufo

16

आप वास्तविक मात्राओं की क्वेरी के बिना ऐसा कर सकते हैं, इसलिए यह आपको स्क्रिप्ट निष्पादन के दौरान कुछ समय और संसाधनों को बचाएगा।

mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'"); 

वरना, आप क्या गलत कर रहे थे कि आप एक स्ट्रिंग (points='5'+1) के रूप में अंक की पुरानी राशि से पारित कर दिया है, और आप एक स्ट्रिंग के लिए एक नंबर नहीं जोड़ सकते। ;)

10

आशा मैं अपनी पहली पोस्ट पर offtopic नहीं जा रहा हूँ, लेकिन मैं कुछ के रूप में स्ट्रिंग के लिए पूर्णांक की कास्टिंग पर एक छोटे से विस्तार करना चाहते हैं उत्तरदाताओं को यह गलत लगता है।

क्योंकि इस क्वेरी में अभिव्यक्ति एक अंकगणितीय ऑपरेटर (प्लस प्रतीक +) का उपयोग करती है, MySQL अभिव्यक्ति में किसी स्ट्रिंग को संख्याओं में परिवर्तित कर देगा।

प्रदर्शित करने के लिए, निम्नलिखित परिणाम 6 का उत्पादन करेगा: तो क्या यहां कोई अस्पष्टता नहीं है और MySQL तार तैरता में धर्मान्तरित और उन्हें एक साथ जोड़ता है

MySQL में
SELECT ' 05.05 '+'.95'; 

स्ट्रिंग संयोजन concat() फ़ंक्शन की आवश्यकता है।

मुझे वास्तव में लगता है कि प्रारंभिक क्वेरी काम नहीं कर रही थी क्योंकि संभवतः $ पॉइंट वैरिएबल वास्तव में उपयोगकर्ता के वर्तमान बिंदुओं पर सेट नहीं था। यह या तो शून्य पर सेट किया गया था, या अनसेट था: MySQL शून्य पर एक खाली स्ट्रिंग डालेगा। चित्रण के लिए, निम्नलिखित 0:

SELECT ABS(''); 

जैसा कि मैंने कहा, मुझे उम्मीद है कि मैं बहुत दूर नहीं हूं। मैं मानता हूं कि इस विशेष समस्या के लिए दान और टॉमस के पास सबसे अच्छे समाधान हैं।

+0

+1 कंपटन बहुत अच्छे अंक हैं, आप कलाकारों के काम के बारे में सही हैं, उद्धरण दें या नहीं। एसओ में आपका स्वागत है! –

7

इसके अलावा, "वेतन वृद्धि" स्ट्रिंग, जब अद्यतन, उपयोग करने के लिए CONCAT

update dbo.test set foo=CONCAT(foo, 'bar') where 1=1 
2

कौन स्ट्रिंग और संख्या SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:[email protected]+1);

0

आप एसक्यूएल इंजेक्शन जोखिम को रोकने के लिए पीडीओ का उपयोग करना चाहिए अपडेट करनी होगी। डीबी क्वेरी करने के लिए अंकों की संख्या प्राप्त करने के लिए

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) में वृद्धि कर सकते हैं।

(ध्यान दें:। इसके अलावा, यह एक अच्छा विचार पीएचपी साथ मूल्य को बढ़ाने के लिए है क्योंकि आप और पहली डेटा का चयन करने की जरूरत है मान बदल सकता है अगर अन्य उपयोगकर्ता उसे अपडेट किया जाता है नहीं है)

$req = $bdd->prepare('UPDATE member_profile SET 
      points = points + 1 
      WHERE user_id = :user_id'); 

$req->execute(array(
    'user_id' => $userid 
)); 
संबंधित मुद्दे