2012-05-09 13 views
15

के दौरान प्रभावित पंक्तियां थीं मुझे पीडीओ के लिए निष्पादन कथन का उपयोग करने के कई तरीके मिले हैं, लेकिन मुझे यकीन नहीं है कि यह मेरी मदद करता है। मेरी समझ यह है कि मुझे तैयार बयानों के लिए execute() फ़ंक्शन का उपयोग करना होगा। मैं उपयोगकर्ता इनपुट से डेटा के साथ एक पंक्ति अद्यतन कर रहा हूं, इसलिए मैं क्वेरी() कॉल के बजाय एक तैयार कथन का उपयोग करना चाहता हूं।पीडीओ निष्पादन वक्तव्य

$dbh = buildDBConnector(); 
$sql = "UPDATE tb_users 
    SET authState=1 
    WHERE id = ? AND authPass = ?"; 
$q = $dbh->prepare($sql); 
$f = $q->execute(array($id,$authPass)); 
if($f){ 
    echo '<br />Success<br />'; 
}else{ 
    echo '<br />Failure<br />'; 
} 

मुद्दा यह है कि स्वयं क्वेरी त्रुटि मुक्त है और ठीक निष्पादित करता है, इसलिए वहाँ $ f में स्टोर करने के लिए कोई विफलता है:

मेरे कोड इस प्रकार है। हालांकि, मुझे यह जानने की ज़रूरत है कि क्या इसे वास्तव में अद्यतन करने के लिए पंक्ति मिली है, फिर इसे सफलतापूर्वक अपडेट किया गया है। दूसरे शब्दों में, मुझे प्रभावित पंक्तियों की आवश्यकता है। जब गुगलिंग और ऐसा होता है, तो यह निष्पादन वक्तव्य में आता रहता है, लेकिन मेरी समझ से, निष्पादन तैयार बयान के लिए नहीं है? कोई सुझाव?

+0

चेतावनी: मूल्य है अगर * पहले से ही * सेट (अद्यतन दो बार निष्पादित किया जाता है, एक डबल क्लिक किया हो सकता है से सबमिट बटन) दूसरी बार एक त्रुटि का कारण होता है, भले ही डेटा ठीक है। उपयोगकर्ता अनुभव के लिए, यह देखने के लिए बाद में एक चुनिंदा कथन करने के लिए और अधिक भरोसेमंद हो सकता है कि रिकॉर्ड सही मान के साथ मौजूद है या नहीं, tb_users से authState चुनें जहां id =? और authPass =? '। कोई परिणाम नहीं है कि आईडी या पासवर्ड मौजूद नहीं है। (पीएस मुझे आशा है कि आपके पास पासवर्ड है! pbdkf2 को देखो!) –

उत्तर

29

$q->rowCount() आज़माएं। तैयार बयान उस विधि के माध्यम से प्रभावित पंक्तियों की संख्या वापस कर देगा।

+7

ध्यान रखें कि डिफ़ॉल्ट रूप से, MySQL पंक्तियों की संख्या वास्तव में बदल देता है, और जहां खंड से मिलान की गई पंक्तियों की संख्या नहीं है (उसी मान के साथ अद्यतन जारी करना मौजूदा लोग पंक्ति को नहीं बदलते हैं) –

+1

मुझे पता है कि बहुत से लोग पूरे वेब पर पढ़ी गई चीज़ों के बारे में निर्णय लेते हैं, त्वरित प्रतिक्रिया पर बहुत अच्छा काम! जब $ सभी ने कहा और किया गया तो आवश्यक नहीं है, तो निम्नानुसार समाप्त हो सकता है: यदि ($ q-> rowCount()) {... – MaurerPower

+6

उपयोग: $ q-> rowCount() यह एक त्रुटि देता है: $ एफ-> पंक्ति गणना() –

14

$q->rowCount() पिछले (निष्पादित) SQL विवरण जहां $q तैयार बयान जो अक्सर $stmt कहा जाता है से प्रभावित पंक्तियों की संख्या देता है।

तो अधिकांश उपयोगकर्ताओं को जो पढ़ने कुछ इस तरह देख सकते हैं:

$pdo = new PDO($dsn, $username, $password); 
$sql = "UPDATE tb_users SET authState=1 WHERE id = ? AND authPass = ?"; 
$stmt = $dbh->prepare($sql); 
$stmt->execute(array($id, $authPass)); 

if ($stmt->rowCount()){ 
    echo 'Success: At least 1 row was affected.'; 
} else{ 
    echo 'Failure: 0 rows were affected.'; 
} 
-2

मुझे लगता है कि पीडीओ ROWCOUNT() एकल अद्यतन क्वेरी के साथ MySQL में बेकार है। क्योंकि यह हमेशा 0 लौटाता है;

ex: 
TABLE{id=1, col1="A"} 
UPDATE TABLE SET col1="AA" WHERE id=1; 
rowCount will return 0; 

also 
UPDATE TABLE SET col1="AA" WHERE id=999; 
rowCount will return 0; 

so rowCount() is useless in this case. 

मैं अभी तक इस क्वेरी अद्यतन मेज सेट col1 = 'एए' के ​​साथ परीक्षण नहीं किया

0

पीडीओ के rowCount() तैयार बयान रिटर्न प्रभावित पंक्तियों अगर यह एक UPDATE, DELETE या INSERT बयान है से। अन्यथा यह SELECT कथन से कितनी पंक्तियां लौटा दी जाती है।

7

एक साइड नोट: समान मान वाले तालिका को अपडेट करते समय rowCount() हमेशा 0 वापस आ जाएगा। यह सामान्य व्यवहार है। आप निम्न विशेषता के साथ एक पीडीओ वस्तु बनाकर पीएचपी 5.3 के बाद से यह अपने आप को बदल सकते हैं:

<? php 
$p = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); 
?> 

rowCount() तो वापस आ जाएगी कि कितने पंक्तियों अपने अद्यतन क्वेरी वास्तव में पाया/मिलान नहीं हुआ।

+0

मुझे नहीं पता था कि यह एक बात थी !!हां सभी! – Gurnzbot

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