diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
index bd367973097898dddc20f2d2ad0c79b6c96930e4..cf6183b02380593d14e8c3f5675506525ca5d716 100644
--- a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
+++ b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
@@ -71,4 +71,8 @@ class FunctionBuilder implements IFunctionBuilder {
 	public function subtract($x, $y) {
 		return new QueryFunction($this->helper->quoteColumnName($x) . ' - ' . $this->helper->quoteColumnName($y));
 	}
+
+	public function count($input) {
+		return new QueryFunction('COUNT(' . $this->helper->quoteColumnName($input) . ')');
+	}
 }
diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php
index b2c54cd7c7e13c6784eee2db96d6091649b91742..df7f70c5dd2cc9c8383a0bed5be64611a10d89dd 100644
--- a/lib/private/User/Database.php
+++ b/lib/private/User/Database.php
@@ -96,6 +96,7 @@ class Database extends ABackend
 	 * \OC\User\Database constructor.
 	 *
 	 * @param EventDispatcher $eventDispatcher
+	 * @param string $table
 	 */
 	public function __construct($eventDispatcher = null) {
 		$this->cache = new CappedMemoryCache();
@@ -159,8 +160,10 @@ class Database extends ABackend
 		$this->fixDI();
 
 		// Delete user-group-relation
-		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*users` WHERE `uid` = ?');
-		$result = $query->execute([$uid]);
+		$query = $this->dbConn->getQueryBuilder();
+		$query->delete('users')
+			->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid))));
+		$result = $query->execute();
 
 		if (isset($this->cache[$uid])) {
 			unset($this->cache[$uid]);
@@ -184,8 +187,15 @@ class Database extends ABackend
 		if ($this->userExists($uid)) {
 			$event = new GenericEvent($password);
 			$this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event);
-			$query = \OC_DB::prepare('UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?');
-			$result = $query->execute([\OC::$server->getHasher()->hash($password), $uid]);
+
+			$hasher = \OC::$server->getHasher();
+			$hashedPassword = $hasher->hash($password);
+
+			$query = $this->dbConn->getQueryBuilder();
+			$query->update('users')
+				->set('password', $query->createNamedParameter($hashedPassword))
+				->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid))));
+			$result = $query->execute();
 
 			return $result ? true : false;
 		}
@@ -206,8 +216,12 @@ class Database extends ABackend
 		$this->fixDI();
 
 		if ($this->userExists($uid)) {
-			$query = \OC_DB::prepare('UPDATE `*PREFIX*users` SET `displayname` = ? WHERE LOWER(`uid`) = LOWER(?)');
-			$query->execute([$displayName, $uid]);
+			$query = $this->dbConn->getQueryBuilder();
+			$query->update('users')
+				->set('displayname', $query->createNamedParameter($displayName))
+				->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid))));
+			$query->execute();
+
 			$this->cache[$uid]['displayname'] = $displayName;
 
 			return true;
@@ -253,7 +267,7 @@ class Database extends ABackend
 			->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')))
 			->orWhere($query->expr()->iLike('configvalue', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')))
 			->orderBy($query->func()->lower('displayname'), 'ASC')
-			->orderBy($query->func()->lower('uid'), 'ASC')
+			->orderBy('uid_lower', 'ASC')
 			->setMaxResults($limit)
 			->setFirstResult($offset);
 
@@ -406,13 +420,12 @@ class Database extends ABackend
 	public function countUsers() {
 		$this->fixDI();
 
-		$query = \OC_DB::prepare('SELECT COUNT(*) FROM `*PREFIX*users`');
+		$query = $this->dbConn->getQueryBuilder();
+		$query->select($query->func()->count('uid'))
+			->from('users');
 		$result = $query->execute();
-		if ($result === false) {
-			Util::writeLog('core', \OC_DB::getErrorMessage(), ILogger::ERROR);
-			return false;
-		}
-		return $result->fetchOne();
+
+		return $result->fetchColumn();
 	}
 
 	/**
diff --git a/lib/public/DB/QueryBuilder/IFunctionBuilder.php b/lib/public/DB/QueryBuilder/IFunctionBuilder.php
index e0e331c080797d6e427217017fb50102a6c92382..51b639028ce1f9886421d03ba9b6ffa626eec03c 100644
--- a/lib/public/DB/QueryBuilder/IFunctionBuilder.php
+++ b/lib/public/DB/QueryBuilder/IFunctionBuilder.php
@@ -96,4 +96,12 @@ interface IFunctionBuilder {
 	 * @since 14.0.0
 	 */
 	public function subtract($x, $y);
+
+	/**
+	 * @param mixed $input The input to be counted
+	 *
+	 * @return IQueryFunction
+	 * @since 14.0.0
+	 */
+	public function count($input);
 }
diff --git a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
index 1b998287c980f11d069d4275f94d053613d40141..136650741f551fad9cf46c9d20b5a4652bb1bc42 100644
--- a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
+++ b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
@@ -110,4 +110,14 @@ class FunctionBuilderTest extends TestCase {
 
 		$this->assertEquals(1, $query->execute()->fetchColumn());
 	}
+
+	public function testCount() {
+		$query = $this->connection->getQueryBuilder();
+
+		$query->select($query->func()->count('appid'));
+		$query->from('appconfig')
+			->setMaxResults(1);
+
+		$this->assertGreaterThan(1, $query->execute()->fetchColumn());
+	}
 }