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

mysql के बाद पंक्तियों को अपडेट करें foreach का चयन करें

पहला मुद्दा, आप तैयार बयानों का बिल्कुल भी फायदा नहीं उठा रहे थे। पैरामीटर का उपयोग करें (? क्वेरी में) और फिर उन्हें execute() . में मानों से भरें कॉल करें।

साथ ही, अपनी क्वेरी को लूप के बाहर तैयार करें, और इसे अंदर निष्पादित करें। यह पहले से बयान तैयार करने के प्रमुख लाभों में से एक है, जब वे केवल एक बार तैयार किए जाते हैं तो कम ओवरहेड होता है।

अंत में, आपकी क्वेरी से पहले डेटाबेस की जाँच करने और फिर दो प्रश्नों में से एक को निष्पादित करने की कोई आवश्यकता नहीं है। बस MySQL को यह जांचने दें कि क्या मान पहले से मौजूद है INSERT...ON DUPLICATE KEY UPDATE वाक्य - विन्यास। यह डेटाबेस पर ठीक से सेट होने पर निर्भर करता है, इसलिए एक UNIQUE . होना चाहिए (session.usr_id, session.site_id) . पर अनुक्रमणिका ।

यह परीक्षण नहीं किया गया है, लेकिन आपको आगे बढ़ना चाहिए:

$stmt1 = $handler->prepare("SELECT id,comments,likes,views FROM sites WHERE usr_id = ?");
$stmt2 = $handler->prepare("INSERT INTO session SET comments = ?, likes = ?, views = ?, usr_id = ?, site_id = ? ON DUPLICATE KEY UPDATE comments = VALUES(comments), likes = VALUES(likes), views = VALUES(views)");

$stmt1->execute(array($usr_id));
while($row = $stmt1->fetch(PDO::FETCH_ASSOC)) {
    $site_id = $row["id"];
    $stmt2->execute(array($comments, $likes, $views, $usr_id, $site_id));
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO/MySQL rowCount अपेक्षित रूप से वापस नहीं आ रहा है

  2. मुझे कैसे पता चलेगा कि एक mysql तालिका myISAM या InnoDB इंजन का उपयोग कर रही है?

  3. क्या BIGINT(8) सबसे बड़ा पूर्णांक MySQL स्टोर कर सकता है?

  4. PHP में MySQL डेटाबेस का बैकअप लें और पुनर्स्थापित करें

  5. आप mysql2 मणि ​​के साथ तैयार बयान कैसे बनाते हैं?