2012-03-01 9 views
6

मुझे पीडीओ तैयार कथन और पंक्तियों के साथ समस्या है जिसमें प्रभावित पंक्तियों की गलत संख्या लौट रही है।पीडीओ पंक्ति गणना प्रभावित पंक्तियों की सही संख्या वापस नहीं कर रही

create table test (
    boolean var1; 
); 

तो मैं निम्नलिखित परीक्षण कोड है:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)"); 
$sth->execute(array(':val' => true)); 
echo $sth->rowCount(); 

अपेक्षा के अनुरूप कौन देता है: 1 पंक्तियों प्रभावित

और जब मैं डालने

मैं का एक साधारण परीक्षण डेटाबेस है एक अमान्य प्रकार और सम्मिलन विफल रहता है:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)"); 
$sth->execute(array(':val' => 20)); 
echo $sth->rowCount(); 

कौन सा अपेक्षा के अनुरूप रिटर्न: 0 पंक्तियों

प्रभावित हालांकि, जब मैं अनेक निवेशन है - में

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)"); 

$sth->execute(array(':val' => true)); 
echo $sth->rowCount() . ", "; 

$sth->execute(array(':val' => 20)); 
echo $sth->rowCount(); 

परिणाम: 1, 1

और अगर मैं निष्पादन आदेश फ्लिप मैं : 0, 1

पंक्ति गणना() - सफल पंक्तियों को सफल होने के बाद असफल पंक्ति पर शून्य पर सेट नहीं किया जा रहा है एसएस कथन?

मैं php 5.3.6-13 और Postgresql 9.1

+1

बस पीडीओ के लिए अपवाद को चालू करना और का एक बेहतर रास्ता मिल ऐसे मामलों को संभालना – zerkms

+1

यह मुझे समझ में आता है क्योंकि आपने उसी पीडीओएसएटमेंट का पुन: उपयोग किया था। यदि आपको प्रत्येक कथन के लिए एक अलग पंक्ति गणना की आवश्यकता है, तो दूसरा कथन तैयार करें। – Ozzy

उत्तर

2

चल रहा हूँ मुझे ऐसा लगता है कि $sth->execute(array(':val' => true)) पूरा करता सफलतापूर्वक इस प्रकार rowCount बढ़ रही है, लेकिन $sth->execute(array(':val' => 20)) नहीं करता है। यहाँ हर चरण में $sth के लिए rowCount की स्थिति है:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)"); 

# No successful DML queries have been done with the $sth yet. 
# rowCount == 0 

$sth->execute(array(':val' => true)); 
echo $sth->rowCount() . ", "; 

# rowCount increases because of a successful INSERT statement 
# rowCount == 1 

$sth->execute(array(':val' => 20)); 
echo $sth->rowCount(); 

# rowCount does not increase due to failed INSERT statement 
# rowCount == 1 
अब

देता विपरीत क्रम में उसे देखो:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)"); 

# No successful DML queries have been done with the $sth yet. 
# rowCount == 0 

$sth->execute(array(':val' => 20)); 
echo $sth->rowCount(); 

# rowCount does not increase due to failed INSERT statement 
# rowCount == 0 

$sth->execute(array(':val' => true)); 
echo $sth->rowCount() . ", "; 

# rowCount increases because of a successful INSERT statement 
# rowCount == 1 
संबंधित मुद्दे