Explicitely check the return value of PDOStatement::execute()
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 19 Aug 2015 11:04:53 +0000 (13:04 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 19 Aug 2015 11:09:47 +0000 (13:09 +0200)
commit503d93d94aa7498100a41ad8eb1276e5d5a0f9e9
treeabe8ea1c7f5302f8b0b768e3c7380b7f6dea5008
parentcb313d277f93c1d789a9518b1b269d0aff24f40b
Explicitely check the return value of PDOStatement::execute()

PHP apparently does not always throw an Exception when a statement
could not be executed successfully. An example of this is:

    $sql = "SELECT ?";
    $statement = WCF::getDB()->prepareStatement($sql);
    $statement->execute([ 1, 2 ]); // returns false

This code is erroneous, as we try to send more parameters than there
are placeholders in the query. Thus execute() properly returns false,
but it does not throw an Exception.

Interestingly enough the reverse case properly throws: Sending less
parameters than placeholders.
wcfsetup/install/files/lib/system/database/statement/PreparedStatement.class.php