2008-08-08 26 views
18

मैं कैसे 1 क्वेरीएक क्षेत्र के लिए 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 आधुनिक में यह उपयोग कर रहा हूँ में निम्नलिखित 2 प्रश्नों बारी है, लेकिन सार है कि मैं स्तर हड़पने है, एक यह करने के लिए तो जोड़ने अपडेट करें, ऐसा लगता है कि अगर मैं इसे एक प्रश्न के रूप में कर सकता हूं तो यह बहुत आसान और तेज़ होगा।

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

उत्तर

29

मैं इसके लिए डाउनमोड हो गया हूं?

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

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

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

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

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

level INT DEFAULT '0' NOT NULL 

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

+1

मैं एक मुद्दा जहां अगर 'स्तर' अशक्त है, यह नहीं बढ़ेगी है। – MaurerPower

2

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

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

+0

विशेष रूप से उद्धरण के बिना किसी को भी SQL इंजेक्शन $ id = "'null' के साथ अंतिम उद्धरण से बचने के लिए या कौशल से हटाएं;"; haha –

1

इस

UPDATE skills SET level = level + 1 WHERE id = $id 
10

इस तरह का प्रयास करें:

UPDATE skills 
SET level = level + 1 
WHERE id = $id 
0

कैसे के बारे में:

UPDATE skills SET level = level + 1 WHERE id = $id; 
-1

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

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

5
पीडीओ और तैयार क्वेरी के साथ

:

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