diff --git a/lib/SimpleSAML/Database.php b/lib/SimpleSAML/Database.php
index e66288b2d8fbb4307f2eb4babee1ffd1a0daefaf..1012e116e6d7cf7add3a6774b648dbfd4c8372a0 100644
--- a/lib/SimpleSAML/Database.php
+++ b/lib/SimpleSAML/Database.php
@@ -260,14 +260,15 @@ class Database
      * @param string $stmt Prepared SQL statement
      * @param array  $params Parameters
      *
-     * @return \PDOStatement object
+     * @return int The number of rows affected by the query.
      */
     public function write($stmt, $params = array())
     {
         $db = $this->dbMaster;
 
         if (is_array($params)) {
-            return $this->query($db, $stmt, $params);
+            $obj = $this->query($db, $stmt, $params);
+            return $obj->rowCount();
         } else {
             return $this->exec($db, $stmt);
         }
diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
index cb66c36ca5c1ab0b22299711b2fdd9b70d9ffb3c..e8981169d4984b18b9fb0d0ebd8e8b766b1bd397 100644
--- a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
+++ b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
@@ -196,18 +196,18 @@ class SimpleSAML_Metadata_MetaDataStorageHandlerPdo extends SimpleSAML_Metadata_
         );
 
         if ($retrivedEntityIDs !== false && count($retrivedEntityIDs) > 0) {
-            $stmt = $this->db->write(
+            $rows = $this->db->write(
                 "UPDATE $tableName SET entity_data = :entity_data WHERE entity_id = :entity_id",
                 $params
             );
         } else {
-            $stmt = $this->db->write(
+            $rows = $this->db->write(
                 "INSERT INTO $tableName (entity_id, entity_data) VALUES (:entity_id, :entity_data)",
                 $params
             );
         }
 
-        return 1 === $stmt->rowCount();
+        return $rows === 1;
     }
 
 
@@ -229,16 +229,29 @@ class SimpleSAML_Metadata_MetaDataStorageHandlerPdo extends SimpleSAML_Metadata_
 
     /**
      * Initialize the configured database
+     *
+     * @return int|false The number of SQL statements successfully executed, false if some error occurred.
      */
     public function initDatabase()
     {
+        $stmt = 0;
+        $fine = true;
         foreach ($this->supportedSets as $set) {
             $tableName = $this->getTableName($set);
-            $this->db->write(
+            $rows = $this->db->write(
                 "CREATE TABLE IF NOT EXISTS $tableName (entity_id VARCHAR(255) PRIMARY KEY NOT NULL, entity_data ".
                 "TEXT NOT NULL)"
             );
+            if ($rows === 0) {
+                $fine = false;
+            } else {
+                $stmt += $rows;
+            }
+        }
+        if (!$fine) {
+            return false;
         }
+        return $stmt;
     }
 
 }
diff --git a/tests/lib/SimpleSAML/DatabaseTest.php b/tests/lib/SimpleSAML/DatabaseTest.php
index 7ab129fd23f1ea588268dc85534c600b55cf41f9..833d2e0ae618fe631f51febd4b9456d5cd0ecd0f 100644
--- a/tests/lib/SimpleSAML/DatabaseTest.php
+++ b/tests/lib/SimpleSAML/DatabaseTest.php
@@ -251,7 +251,7 @@ class SimpleSAML_DatabaseTest extends PHPUnit_Framework_TestCase
             "INSERT INTO $table (ssp_key, ssp_value) VALUES (:ssp_key, :ssp_value)",
             array('ssp_key' => array($ssp_key, PDO::PARAM_INT), 'ssp_value' => $ssp_value)
         );
-        $this->assertEquals(1, $stmt->rowCount(), "Could not insert data into $table.");
+        $this->assertEquals(1, $stmt, "Could not insert data into $table.");
 
         $query2 = $this->db->read("SELECT * FROM $table WHERE ssp_key = :ssp_key", array('ssp_key' => $ssp_key));
         $data = $query2->fetch();