Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

यदि इनपुट मान शून्य नहीं हैं तो कॉलम अपडेट करें अन्यथा अनदेखा करें और कॉलम के मौजूदा मानों को डेटाबेस में रखें

आप उपयोगकर्ता नाम सीधे SQL में बिना भागे या उद्धृत किए सम्मिलित कर रहे हैं। मुझे लगता है कि आप बस धर्मत्यागी से चूक गए।

SQL इंजेक्शन समस्याओं को रोकने के लिए, कभी भी गतिशील डेटा से SQL स्ट्रिंग स्थिरांक सम्मिलित न करें, हमेशा तैयार किए गए स्टेटमेंट का उपयोग करें और मार्कर डालें।

वैकल्पिक रूप से, मानों से बचें, लेकिन मार्करों का उपयोग करना अधिक सुरक्षित है, और डेटाबेस को संकलित SQL कथन को कैश करने की अनुमति देकर SQL प्रदर्शन में सुधार करता है।

String updateQuery = "UPDATE " + USER_TABLE +
                       " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +
                                 USER_TABLE_LAST_NAME + "=?," +
                                 USER_TABLE_ABOUT_ME + "=?," +
                                 USER_TABLE_CITY + "=?," +
                                 USER_TABLE_DOB + "=?" +
                     " WHERE " + USER_TABLE_ID + "=?";
PreparedStatement stmt = conn.prepareStatement(updateQuery);
stmt.setString(1, user.getFirstName());
stmt.setString(2, user.getLastName());
stmt.setString(3, user.getAboutMe());
stmt.setString(4, user.getCity());
stmt.setString(5, user.getDateOfBirth());
stmt.setString(6, user.getUserId());

नोट: शून्य चेक समस्या को कवर करने के लिए उत्तर बढ़ाया गया।

जब आप साधारण स्ट्रिंग इंजेक्शन का उपयोग कर रहे हों, "A='" + name + "'" हो जाता है A='Joe' एक गैर-शून्य मान के लिए लेकिन A='null' एक शून्य मान के लिए, जो निश्चित रूप से वह नहीं है जो आप चाहते हैं।

पैरामीटर मार्करों का उपयोग करके, ? . का मान nullहो सकता है , जिसका अर्थ है कि IFNULL(?, Name) आवश्यक सटीक व्यवहार देगा, यानी ? . के मान का उपयोग करना जब यह रिक्त न हो, और NAME . का मान कब ? शून्य है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में दो डेटाबेस स्कीमा को सिंक्रोनाइज़ करें

  2. MySQL - गिराए गए प्रदर्शन स्कीमा डेटाबेस को पुनर्प्राप्त करें

  3. Utf8_unicode_ci और utf8_unicode_520_ci . में क्या अंतर है?

  4. NodeJS/mySQL - ER_ACCESS_DENIED_ERROR उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए प्रवेश निषेध (पासवर्ड का उपयोग करके:हाँ)

  5. mysqli->set_charset() करने का एक स्थायी तरीका?