2010-05-27 14 views
9

मैं एक PHP-MySQL डेटाबेस प्रोसेसर लिखने की कोशिश कर रहा हूं जो कुछ हद तक बुद्धिमान है। जब यह प्रोसेसर तय करता है कि इसे अद्यतन करने की आवश्यकता है, तो मैं रिपोर्ट करना चाहता हूं कि यह वास्तव में सफल था या नहीं। मैंने सोचा कि मैं mysql_affected_rows इस्तेमाल कर सकते हैं ...PHP, MySQL - क्या आप मिलान की पंक्तियों और पंक्तियों के बीच अंतर कर सकते हैं?

// Example: 
// After running query "UPDATE mytable SET name='Test' WHERE ID=1" 
$result = mysql_affected_rows(); 
if ($result >= 1) { /* Success */ } 

हैं, उदाहरण के लिए, वहाँ आईडी = 1 के साथ कोई पंक्ति था, तो $result होगा।

हालांकि, यह पता चला है कि वास्तविक प्रभावित पंक्तियों है PHP के mysql_affected_rows, और हो सकता है अभी भी हो सकता है अगर पंक्ति मौजूद है, लेकिन पहले से ही name "टेस्ट" था। (PHP docs यह भी कहता है कि यह मामला है)।

अगर मैं आदेश पंक्ति में इस चलाने के लिए, मैं क्वेरी के बारे में निम्न मेटा जानकारी प्राप्त:

Query OK, 0 rows affected (0.01 sec) 
Rows matched: 1 Changed: 0 Warnings: 0 

वहाँ मुझे पाने के लिए है कि "पंक्तियाँ मिलान किया" प्रभावित करने के बजाय PHP में मूल्य के लिए कोई तरीका है पंक्तियों?

[ संपादित करें]: मुझे ध्यान रखना चाहिए कि मुझे पता है कि मैं एक अलग क्वेरी चला सकता हूं, लेकिन मैं प्रदर्शन के लिए ऐसा नहीं करना चाहता हूं।

उत्तर

12

mysql_affected_rows के लिए MySQL documentation से:

अद्यतन बयान लिए, यदि आप CLIENT_FOUND_ROWS झंडा जब mysqld से कनेक्ट कर निर्दिष्ट करें, mysql_affected_rows() कहां खंड के अनुरूप पंक्तियों की संख्या दिखाता है। अन्यथा, डिफ़ॉल्ट व्यवहार वास्तव में पंक्तियों की संख्या को वापस करने के लिए है।

साथ mysqli, आप CLIENT_FOUND_ROWS mysqli::real_connect का उपयोग कर निर्दिष्ट कर सकते हैं।

$db = mysqli_init(); 
$db->real_connect('host', 'username', 'password', 'dbname', '3306', null, MYSQLI_CLIENT_FOUND_ROWS); 

में पीडीओ, निरंतर पीडीओ :: नामित MYSQL_ATTR_FOUND_ROWS

$db = new PDO('mysql:dbname=mydatabase;host=myhost', 'username', 'password', array(
    PDO::MYSQL_ATTR_FOUND_ROWS => true 
)); 
वर्ष के साथ

और MySQL विस्तार हटाई गई है, आप CLIENT_FOUND_ROWS mysql_connect के लिए 5 वीं पैरामीटर के रूप में मान 2 गुजर निर्दिष्ट कर सकते हैं (source)।

पंक्तियाँ मिलान नहीं हुआ:: 1 परिवर्तित: 0 चेतावनी: 0

आप काम कर सकते हैं

+0

यह बहुत अच्छा है। हालांकि यह मुझे दोनों के बीच अंतर करने का एक तरीका नहीं प्रदान करता है (इसलिए मैं जवाब स्वीकार करने से पहले इसका परीक्षण करने जा रहा हूं) ऐसा लगता है कि मेरे मामले में मुझे बेहतर स्थिति है। धन्यवाद! – Nicole

+0

मुझे अपने उत्तर से बेहतर जवाब पसंद है! :) – Sev

+0

PHP lib MySQL C api lib पर इस तरह का एक पारदर्शी रैपर है, आप वास्तव में PHP/MySQL एपीआई – bobobobo

6

तुम भी समारोह

$variable = mysql_info(); 

कि समारोह इस तरह एक स्ट्रिंग को पुन: प्राप्त उपयोग कर सकते हैं तारों की संख्या के साथ सबस्ट्रिंग निकालने के लिए अपने चर पर स्ट्रिंग फ़ंक्शंस के साथ और आपके पास यह होना चाहिए!

+1

धन्यवाद, इससे मुझे बहुत मदद मिली। आप इस तरह से मेल भी कर सकते हैं: 'preg_match ('/^ \ D + (\ d +) \ D + (\ d +) \ D + (\ d +) $/', $ चर, $ मैचों); ' – Anonymous

+0

' mysqliObject- > 'नया' mysqli' एक्सटेंशन का उपयोग करते समय जानकारी '। –

संबंधित मुद्दे