Что не так с этим скриптом?

Очень крутая задача, в которой не всё так просто, как кажется на первый взгляд. Попробуйте найти в ней 2 логические ошибки. SQL-инъекция здесь служит отвлекающим манёвром.

<?php
 $dest = $_POST['destination'];
 $result = $_POST['data']['result'];
 $output = "";
 if ($dest == 'file') {
     $file = fopen('storage.txt', 'a+');
     fwrite($file, $result);
     $output = "stored in file";
 } elseif ($dest == 'db') {
     $db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass');
     $db->exec("INSERT INTO storage (value) VALUES ('{$result}');");
     $output = "stored in db";
 }
 echo $output;

Что произойдёт, если по какой-то причине fwrite() не удастся произвести запись в файл? Он вернёт false, а скрипт благополучно выведет на экран stored in file, что введёт пользователя в заблуждение, и может привести всю систему в неконсистентное состояние.

Вторая логическая ошибка аналогичная. Тех, кто мало работал с PDO может шокировать то, что PDO::exec() не бросает исключений в случае ошибок. Да, PDO::__construct() бросает исключение, а PDO::exec() — нет. Однако, он возвращает количество затронутых строк. Т.е. если было вставлено 0 строк, то выводить на экран stored in db будет не корректно.

Дополнительно можно проверять что возвращают PDO::errorCode() и PDO::errorInfo().

Вот так привычка работать с исключениями и отсутствие стандартизации в старых стандартных библиотеках PHP могут сыграть злую шутку с программистом в 2к17 году.