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

सेट नाम बनाम mysqli_set_charset - mysqli_escape_string को प्रभावित करने के अलावा, क्या वे समान हैं?

कॉलिंग SET NAMES कनेक्शन पर कॉल करने के बराबर है set_charset , बशर्ते आप न तो कॉल करें get_charset न ही mysql_real_escape_string (और दोस्त)।

जब आप set_charset . पर कॉल करते हैं , PHP दो काम करता है। सबसे पहले, यह SET NAMES . को कॉल करता है कनेक्शन पर। दूसरा, यह याद रखता है कि आपने कौन सा चारसेट सेट किया है। उस राज्य की जानकारी का उपयोग बाद में केवल get_charset . में किया जाता है और mysql_real_escape_string (और दोस्त) कार्य करता है। इसलिए, यदि आप इन कार्यों का उपयोग नहीं करते हैं, तो आप दो समकक्षों पर विचार कर सकते हैं।

आइए चलते हैं स्रोत:

  1. उपयोगकर्ता भूमि कार्य करता है mysql_set_charset और mysqli_set_charset कॉल करें...
  2. इंजन फ़ंक्शन mysql_set_character_set कॉल...
  3. इंजन मैक्रो mysqlnd_set_character_set , जिसे इस प्रकार परिभाषित किया गया है:

    #define mysqlnd_set_character_set(conn, cs) \ ((conn)->data)->m->set_charset((conn)->data, (cs)))

    और विस्तार करता है...

  4. MYSQLND_METHOD(mysqlnd_conn_data, set_charset) जिसमें शामिल निम्नलिखित कोड (चर्चा के लिए क्रमांकित, ये वास्तविक स्रोत पंक्ति संख्या नहीं हैं):
 1   if (PASS == conn->m->local_tx_start(conn, this_func)) {
 2      char * query;
 3      size_t query_len = mnd_sprintf(&query, 0, "SET NAMES %s", csname);
 4 
 5      if (FAIL == (ret = conn->m->query(conn, query, query_len))) {
 6          php_error_docref(NULL, E_WARNING, "Error executing query");
 7      } else if (conn->error_info->error_no) {
 8          ret = FAIL;
 9      } else {
10           conn->charset = charset;
11      }
12      mnd_sprintf_free(query);
13 
14      conn->m->local_tx_end(conn, this_func, ret);
15   }

जैसा कि आप देख सकते हैं, PHP SET NAMES . को कॉल करता है कनेक्शन पर ही (पंक्ति 3)। PHP अभी सेट किए गए वर्णसेट को भी ट्रैक करता है (पंक्ति 10)। टिप्पणियाँ आगे चर्चा करती हैं कि conn->charset . के साथ क्या होता है , लेकिन यह कहने के लिए पर्याप्त है कि यह केवल get_charset . में होता है और mysql_real_escape_string (और दोस्त)।

इसलिए, यदि आप इस स्थिति की परवाह नहीं करते हैं, और आप न तो get_charset का उपयोग करने के लिए सहमत हैं न ही mysql_real_escape_string , तो आप SET NAMES . पर कॉल कर सकते हैं कनेक्शन पर ही बिना किसी दुष्प्रभाव के।

एक तरफ के रूप में, और मैंने ऐसा कभी नहीं किया है, लेकिन ऐसा लगता है कि PHP को -DPHP_DEBUG=1 के साथ संकलित किया जा रहा है विभिन्न DBG . के माध्यम से पर्याप्त डिबगिंग सक्षम करेगा मैक्रोज़ यह देखने में उपयोगी हो सकता है कि आपका कोड इस ब्लॉक से कैसे गुजर रहा है।



  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 में MATCH () फ़ंक्शन कैसे काम करता है

  2. MySQL अवरोही क्रम से सीमा

  3. त्रुटि! MySQL प्रबंधक या सर्वर PID फ़ाइल नहीं मिली! क्यूएनएपी

  4. MySQL त्रुटि कोड:1305। समारोह JSON_EXTRACT MySQL क्लाइंट संस्करण में मौजूद नहीं है:5.5.52

  5. MYSQL डेटाबेस में सभी विदेशी कुंजियाँ छोड़ें