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

एक तालिका से दूसरी तालिका में मान सम्मिलित करना

सबसे पहले, कभी भी SELECT * . का इस्तेमाल न करें कुछ कोड में:यदि तालिका संरचना बदलती है (कभी भी कभी नहीं कहें) तो यह आपको काट देगा (या जिसे भी इस एप्लिकेशन को बनाए रखना है)।

आप INSERT . का उपयोग करने पर विचार कर सकते हैं जो इसके मान SELECT . से लेता है सीधे:

"INSERT INTO admin(userID, forename, ..., `password`, ...)
    SELECT userID, forename, ..., `password`, ...
    FROM jobseeker WHERE userID = ..."

ऐसा करने के लिए आपको PHP के माध्यम से जाने की आवश्यकता नहीं है।

(उपरोक्त उदाहरण का उपयोग करने के लिए खेद है जो mysql_real_escape_string पर निर्भर करता है इस उत्तर के पुराने संस्करण में। mysql_real_escape_string का उपयोग करना एक अच्छा विचार नहीं है , हालांकि यह पैरामीटर को सीधे क्वेरी स्ट्रिंग में डालने से थोड़ा बेहतर है।)

मुझे यकीन नहीं है कि आप किस MySQL इंजन का उपयोग कर रहे हैं, लेकिन आपको उन कथनों को एक ही लेन-देन में भी करने पर विचार करना चाहिए (आपको MyISAM के बजाय InnoDB की आवश्यकता होगी)।

इसके अलावा, मैं mysqli का उपयोग करने का सुझाव दूंगा। और तैयार बयान मापदंडों को बांधने में सक्षम होने के लिए:यह एक बहुत साफ तरीका है कि इनपुट मूल्यों से बचने के लिए नहीं (ताकि SQL इंजेक्शन हमलों से बचा जा सके)।

संपादित करें 2:

(यदि जादुई उद्धरण चालू हैं, तो आप उन्हें बंद करना चाहेंगे।)

$userID = $_GET['userID'];

// Put the right connection parameters
$mysqli = new mysqli("localhost", "user", "password", "db");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

// Use InnoDB for your MySQL DB for this, not MyISAM.
$mysqli->autocommit(FALSE);

$query = "INSERT INTO admin(`userID`, `forename`, `surname`, `salt`, `password`, `profilePicture`)"
    ." SELECT `userID`, `forename`, `surname`, `salt`, `password`, `profilePicture` "
    ." FROM jobseeker WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$query = "UPDATE user SET userType = 'admin' WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$query = "DELETE FROM jobseeker WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$mysqli->commit();

$mysqli->close();

3 संपादित करें: मुझे आपके userID का एहसास नहीं हुआ था एक int था (लेकिन शायद यह वही है क्योंकि आपने कहा है कि यह एक टिप्पणी में स्वत:वृद्धि हुई है):इसे एक int पर डालें और/या इसे WHERE userID = '$userID' (लेकिन फिर से, कभी भी अपने वेरिएबल को सीधे किसी क्वेरी में न डालें, चाहे वह डीबी से पढ़ा जाए या अनुरोध पैरामीटर)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python3 mysqlclient-1.3.6 (उर्फ PyMySQL) उपयोग?

  2. sql . में तालिका में केवल एक मान जोड़ना

  3. MySQL में विशेष रूप से INT डेटा टाइप में NULL कैसे डालें?

  4. MySQL (InnoDB) में सबसे अच्छी मिलान पंक्ति खोजें

  5. MySQL में पाइप कॉन्सटेनेशन ऑपरेटर को कैसे इनेबल करें