एक क्षेत्र में 1 जोड़ें

मैं निम्नलिखित 2 प्रश्नों को 1 क्वेरी में कैसे बदलूं

$sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

मैं इसे एक phpbb mod में उपयोग कर रहा हूं लेकिन यह है कि मैं स्तर को पकड़ता हूं, इसमें एक जोड़ता हूं, फिर अपडेट करता है, ऐसा लगता है कि अगर मैं इसे एक प्रश्न के रूप में कर सकता हूं तो यह बहुत आसान और तेज़ होगा।

संपादित करें: $ id को पहले से ही पूर्णांक होने के लिए मजबूर किया गया है, इस प्रकार इस समय कोई भागने की आवश्यकता नहीं है।

0
ro fr bn

7 उत्तर

$ sql = "अद्यतन कौशल एसईटी स्तर = स्तर + 1 जहां आईडी = $ आईडी";

मुझे उम्मीद है कि आप अपने कोड में कहीं और $ id को व्यवस्थित कर रहे हैं!

0
जोड़ा
विशेष रूप से उद्धरण के बिना किसी को भी SQL इंजेक्शन $ id = "'null' या कौशल से हटाए गए अंतिम उद्धरण से बचने के लिए नहीं है;"; haha
जोड़ा लेखक Josh Bedo, स्रोत

इसे इस्तेमाल करे

UPDATE skills SET level = level + 1 WHERE id = $id
0
जोड़ा

इस तरफ:

UPDATE skills
SET level = level + 1
WHERE id = $id
0
जोड़ा

मैं इसके लिए नीचे उतर गया हूँ?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

Teifion के विशिष्ट मामले में, phpbb डीडीएल उस विशेष फ़ील्ड को न्यूल के रूप में सूचीबद्ध करता है, इसलिए NULL को बढ़ाने का कोई खतरा नहीं है।

सामान्य स्थिति में, आपको शून्य का प्रतिनिधित्व करने के लिए न्यूल का उपयोग नहीं करना चाहिए। NULL का विस्तार करना चाहिए शून्य का उत्तर दें। यदि आप गुमराह करने वाले डेवलपर हैं जो NULL = 0 सोचते हैं, कीबोर्ड से दूर कदम उठाते हैं और एक और शगल पाते हैं, तो आप बस बाकी के लिए जीवन कठिन बना रहे हैं। बेशक, यह कंप्यूटर उद्योग है और हम कौन कह रहे हैं कि आप गलत हैं? यदि आप गलत नहीं हैं, तो उपयोग करें

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

... लेकिन चलिए इसका सामना करते हैं: आप गलत हैं। यदि हर कोई स्तर 0 पर शुरू होता है, तो आपके डीडीएल में शामिल होना चाहिए

level INT DEFAULT '0' NOT NULL

यदि प्रोग्रामर रिकॉर्ड बनाते समय इसे सेट करना भूल जाते हैं। यदि सभी स्तर 0 पर शुरू नहीं होते हैं, तो DEFAULT को छोड़ दें और प्रोग्रामर को सृजन पर मूल्य प्रदान करने के लिए मजबूर करें। यदि कुछ लोग स्तर से परे हैं, जिनके लिए स्तर एक अर्थहीन चीज है, तो उनके स्तर पर एक जोड़ना समान रूप से कोई अर्थ नहीं है। उस स्थिति में, डीडीएल से नॉट नल ड्रॉप करें।

0
जोड़ा
मेरे पास एक मुद्दा है जहां 'स्तर' शून्य है, तो यह वृद्धि नहीं होगी।
जोड़ा लेखक MaurerPower, स्रोत

Mat: यही सवाल है कि सवाल से चिपकाया। इसे संपादित नहीं किया गया है, इसलिए मैं मार्कडाउन में एक बग को श्रेय देता हूं। लेकिन, विचित्र रूप से पर्याप्त, मैंने देखा है।

इसके अलावा: हाँ, mysql_escape_string() !

0
जोड़ा

कैसा रहेगा:

UPDATE skills SET level = level + 1 WHERE id = $id;
0
जोड़ा

पीडीओ और तैयार प्रश्न के साथ:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();
0
जोड़ा