2012-02-22 16 views
17

मैं एक साधारण mysql अद्यतन क्वेरी में प्रभावित पंक्तियों की संख्या प्राप्त करने का प्रयास कर रहा हूं। हालांकि, जब मैं नीचे इस कोड को चलाता हूं, तो PHP का mysql_affected_rows() हमेशा 0 के बराबर होता है। कोई फर्क नहीं पड़ता कि foo = 1 पहले से ही है (जिस स्थिति में फ़ंक्शन सही ढंग से वापस 0 होना चाहिए, क्योंकि कोई पंक्ति नहीं बदली गई थी), या यदि फ़ू वर्तमान में कुछ के बराबर है अन्य पूर्णांक (जिस स्थिति में फ़ंक्शन 1 वापस आना चाहिए)।mysql_affected_rows() अद्यतन अद्यतन के लिए 0 देता है जब भी एक अद्यतन वास्तव में होता है

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 
mysql_query($updateQuery); 
if (mysql_affected_rows() > 0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; // always prints not affected 
} 

अद्यतन बयान ही काम करता है। आईएनटी मेरे डेटाबेस में बदल जाता है। मैंने दोबारा जांच भी की है कि डेटाबेस कनेक्शन पहले से बंद नहीं किया जा रहा है या कुछ भी मजेदार है। ध्यान रखें, mysql_affected_rows को आपको कनेक्शन लिंक पहचानकर्ता को पास करने की आवश्यकता नहीं है, हालांकि मैंने भी कोशिश की है।

समारोह पर विवरण: mysql_affected_rows

कोई भी विचार?

+1

क्या आप वाकई रिकॉर्ड अद्यतन किया जा रहा है कर रहे हैं? सुनिश्चित करें कि आप परीक्षण चलाने से पहले 1 से कम किसी अन्य चीज़ के बराबर foo सेट करते हैं। – northpole

+3

किसी भी मौके से, क्या आपका पृष्ठ दो बार बुलाया जा सकता है, जैसे कि रीराइट नियम के कारण शायद? यह डेटा को पहली बार अपडेट करने का कारण बनता है, और फिर दूसरी बार नहीं जब आप अंतिम आउटपुट देखते हैं ... आपके वेब सर्वर लॉग को जांचने के लिए कोई दिक्कत नहीं होगी। –

+0

क्या आपने पुष्टि की है कि यह वास्तव में 0 लौट रहा है और ऋणात्मक मूल्य नहीं है? – Jodaka

उत्तर

-1

मेरा विचार था!

मैं बस यह बताने वाला था कि फ़ंक्शन को कई बार बुलाया जा रहा है या नहीं!

बस एक छोटी सी सलाह:

का उपयोग कर isset() & पोस्ट/प्राप्त या ऐसा ही कुछ कोशिश;

if (isset($_POST['Update'] == 'yes')) : 

// your code goes here ... 

endif; 

, आशा है कि यह स्पष्ट और उपयोगी था Ciao :)

+1

आप जारीकर्ता() का उपयोग नहीं कर सकते एक अभिव्यक्ति के परिणाम पर। – Cedric

0

इस तरह जोड़ने का प्रयास करें:

$connection = mysql_connect(...,...,...); 

और फिर इस

if(mysql_affected_rows($connection) > 0) 
    echo "affected"; 
} else { ... 
0

मुझे लगता है कि आप की जरूरत है की तरह फोन अद्यतन में कुछ और कोशिश करें तो foo = 1। कुछ अलग रखें तो आप देखेंगे कि यह लूप के बिना अपडेट या नहीं है। तो अगर ऐसा होता है, तो आपके अगर लूप को काम करना चाहिए।

0

आप यह काम करते हैं?

$timestamp=mktime(); 
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2"; 
mysql_query($updateQuery); 

$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}"; 
$res=mysql_query($updateQuery); 
$row=mysql_fetch_row($res); 
if ($row[0]>0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; 
} 
1

आप MySQL समारोह ROW_COUNT सीधे उपयोग करने की कोशिश की है? ROW_COUNT के उपयोग और अन्य MySQL जानकारी कार्यों पर

mysql_query('UPDATE myTable SET foo = 1 WHERE bar = 2'); 
if(mysql_result(mysql_query('SELECT ROW_COUNT()'), 0, 0)) { 
    print "updated"; 
} 
else { 
    print "no updates made"; 
} 

अधिक जानकारी है पर: MySQL के http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

19

नए संस्करणों के लिए पर्याप्त चतुर यदि संशोधन या नहीं किया जाता है देखने के लिए कर रहे हैं। कहते हैं कि चलो तुम एक अद्यतन वक्तव्य ऊपर निकाल दिया:

UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234 

कहना यदि स्तंभ के मूल्य पहले से ही 1 है की सुविधा देता है; तो कोई अपडेट प्रक्रिया नहीं होती है mysql_affected_rows() 0 वापस आ जाएगा; अन्यथा अगर कॉलम आलसी के पास 1 के बजाय कुछ अन्य मूल्य था, तो 1 वापस कर दिया गया है। मानव त्रुटियों को छोड़कर कोई और संभावना नहीं है।

+5

+1। पता नहीं था कि – asprin

+1

तो यह था कि, मेरी जिंदगी मुश्किल बना रही है। अब मैं इसके चारों ओर पाने के लिए अपना कोड अपडेट कर सकता हूं। – zeeshan

1

mysqli_affected_rows के लिए आपको अपने mysqli क्वेरी के संदर्भ के बजाय, केवल एक ही पैरामीटर के रूप में अपने डेटाबेस कनेक्शन के संदर्भ को पारित करने की आवश्यकता है। जैसे।

$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname"); 

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 

echo mysqli_affected_rows($dbref); 

नहीं

echo mysqli_affected_rows($updateQuery); 
0

निम्नलिखित नोट आपके लिए उपयोगी हो जाएगा,

mysql_affected_rows() रिटर्न

  • +0: एक पंक्ति अद्यतन या सम्मिलित नहीं किया गया था (संभवतः क्योंकि पंक्ति पहले से मौजूद है, लेकिन वास्तव में कोई फ़ील्ड मान नहीं बदला गया था नया)।

  • +1: एक पंक्ति

  • 2 सम्मिलित किया गया था: एक पंक्ति

  • -1 अद्यतन किया गया था: गलती की स्थिति में।

mysqli affected rows developer notes

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