2009-09-28 8 views
10

मैं कैसे अपडेट करूं कि मेरा अपडेट सफल है या नहीं? मैं एक अद्वितीय नाम = नाम का उपयोग करके अद्यतन करता हूं इसलिए मुझे हमेशा 0 पंक्तियों या 1 को अपडेट करना चाहिए। यह जांचने का एक अच्छा तरीका क्या है कि मैंने एक पंक्ति अद्यतन की है या नहीं?पंक्तियां PHP के साथ mysql अद्यतन में प्रभावित

उत्तर

14

mysql_affected_rows() आपके अपडेट से प्रभावित पंक्तियों की संख्या वापस कर देगा।

http://us.php.net/manual/en/function.mysql-affected-rows.php

+0

लेकिन सफलता होने पर यह 0 लौटाता है और आप पहले से ही तालिका में समान डेटा डालते हैं। – madlopt

3

mysql_affected_rows का उपयोग करें।

+5

इस 0 वापस कर सकती है अगर क्वेरी में अपडेट किया गया डेटा पहले से ही डेटाबेस में जैसा ही है, इसलिए क्वेरी सफल होने पर भी 0 वापस आ सकती है लेकिन 0 पंक्तियां बदली गईं। लेकिन मुझे लगता है कि आपके उपयोग के मामले में यह परिदृश्य नहीं होगा। – andho

+0

यह लागू हो सकता है, लेकिन यदि आपने शायद "$ query = mysql_query ($ sql) लिखा है;", तो "$ क्वेरी" में "1" होगा यदि यह सफल होता है, तो अन्यथा। – NessDan

0

अपने अद्यतन क्वेरी एक चर नामित $ क्वेरी में है, तो आप कर सकते हैं;

$result = mysql_query($query); 
if($result){ 
    //succes! 
} else { 
    //fail! 
} 

उम्मीद है कि इससे मदद मिलती है। अगर आप जानना चाहते हैं कि आपकी क्वेरी सफलतापूर्वक निष्पादित की गई है, तो यह होगा। यदि आप वास्तव में जानना चाहते हैं कि कितनी पंक्तियां प्रभावित होती हैं, तो अन्य सुझावों का उपयोग करें।

+2

यदि क्वेरी खराब हो गई तो यह केवल 'झूठी' वापस आ जाएगी। यहां तक ​​कि अगर 'अद्यतन' शून्य पंक्तियों पर चल रहा है, तो यह "सफलता" दिखाएगा! – brianreavis

+0

यह केवल आपको बताएगा कि क्वेरी सफलतापूर्वक निष्पादित की गई थी, न कि कितनी पंक्तियां प्रभावित हुईं। –

7

वास्तव में यह जानने का कोई तरीका है का उपयोग करें। मान लें कि तालिका tbl_numbers (आईडी, मान) पंक्तियां (1, "एक") और (2, "दो") है;

$result1="update tbl_numbers set value='first' where id=1"; 

आप अगर यह सच खंड और mysql_affected_rows रिटर्न में $ result2 (चेक करते हैं आप अगर यह सच खंड और mysql_affected_rows() रिटर्न 1.

हालांकि रिटर्न में $ result1, $result2="update tbl_numbers set value='two' where id=2"; के लिए जांच) रिटर्न 0.

और $result3="update tbl_numbers set value='three' where id=3"; आप अगर यह सच खंड और mysql_affected_rows() रिटर्न में $ result3 जांच के लिए, रिटर्न 0.

+0

यह सहायक है .. धन्यवाद – hriziya

2

तो क्या हुआ अगर उपयोगकर्ता डेटा को पुनः सबमिट करता है जो पहले से ही डीबी में जानकारी के समान है? अगर स्मृति कार्य करता है जो 0 के मान के साथ mysql_affected_rows() को वापस कर देगा क्योंकि परिभाषा के अनुसार प्रक्रिया में कोई पंक्तियां अपडेट नहीं की गई थीं। फिर भी सवाल स्वयं सफल रहा।

यह करने के लिए वैकल्पिक हल प्रविष्टि से पहले या तो सबूत अपनी सामग्री या उपयोग करने के लिए होगा:

$result = mysql_query($q); 
if(mysql_affected_rows() == 0) 
    $state = $result ? "Success" : "Fail"; 

इस तरह अगर पंक्तियों अपडेट किए गए थे आप की जाँच करने के लिए मिलता है और आप देख सकते हैं कि नहीं अगर यह एक खराबी थी या बस डेटा दोहराएं।

+0

4 संभावित परिणाम: खराबी, डेटा अपडेट, डेटा दोहराएं, या कुंजी नहीं मिली। दुर्भाग्यवश त्रुटियों की जांच करने से आपको उस कुंजी के बीच अंतर करने में मदद नहीं मिलेगी जो डेटा नहीं मिला और डेटा दोहराया गया है। –

0

मुझे बहुत देर हो चुकी है, लेकिन आप हमेशा अपनी क्वेरी को बदलकर किसी भी मैच में विफलता को मजबूर कर सकते हैं।

कॉलम 'आईडी' और 'मान' के साथ तालिका 'foo' के लिए। मैच अभिव्यक्ति: आईडी = 4

update foo 
join (select ID as nearID, 
ID = 4 
as matched from foo order by matched desc limit 0, 1) as t on nearID = ID 
set value='somedata2'  
, ID = if(matched, nearID, 'nomatch') 

यह शायद सिर्फ तालिका को बदलने के लिए या तो एक अद्यतन टाइमस्टैम्प या क्रम संख्या के बजाय हालांकि शामिल करने के लिए आसान है। (क्योंकि वे प्रत्येक अपडेट पर बदल जाएंगे)

0

पीडीओ का उपयोग कर रहे हैं, तो प्रभावित पंक्तियों के रूप में नीचे rowCount() समारोह का उपयोग कर प्राप्त किया जा सकता है:

/* Delete all rows from the FRUIT table */ 
$del = $dbh->prepare('DELETE FROM fruit'); 
$del->execute(); 

/* Return number of rows that were deleted */ 
print("Return number of rows that were deleted:\n"); 
$count = $del->rowCount(); 
print("Deleted $count rows.\n"); 
0

आप तैयार बयान उपयोग कर रहे हैं ..

//query 
$stmt = $conn->prepare("UPDATE user SET name = 'Jack' WHERE id = ?"); 

//bind parameters 
$stmt->bind_param("i", $id); 

//execute 
$stmt->execute(); 

//updated row count 
echo $stmt->affected_rows; 
echo " rows updated"; 
संबंधित मुद्दे