Нет, существует все еще риск Внедрения SQL любое время, Вы интерполируете непроверенные данные в SQL-запрос.
Параметры запроса помогают избежать этого риска путем разделения литеральных значений от синтаксиса SQL.
'SELECT * FROM mytable WHERE colname = ?'
Это прекрасно, но существуют другие цели интерполировать данные в динамический SQL-запрос, который не может использовать параметры запроса, потому что это не значение SQL, но вместо этого имя таблицы, имя столбца, выражение или некоторый другой синтаксис.
'SELECT * FROM ' + @tablename + ' WHERE colname IN (' + @comma_list + ')'
' ORDER BY ' + @colname'
не имеет значения, используете ли Вы хранимые процедуры или выполняете динамические SQL-запросы непосредственно от кода приложения. Риск все еще там.
средство в этих случаях должно использовать FIEO по мере необходимости:
Вход Фильтра: проверяют это, данные похожи на законные целые числа, имена таблиц, имена столбцов, и т.д. перед интерполяцией их.
Вывод Escape: в этом случае "вывод" означает помещать данные в SQL-запрос. Мы используем функции для преобразования переменных, используемых в качестве строковых литералов в SQL-выражении, так, чтобы меток кавычки и других специальных символов в строке оставили. Мы должны также использовать функции для преобразования переменных, которые использовались бы в качестве имен таблиц, имен столбцов, и т.д. Что касается другого синтаксиса, как запись целых SQL-выражений динамично, это - более сложная проблема.
Да, Spreadsheet :: WriteExcel имеет функцию embed_chart ($ row, $ col, $ filename, $ x, $ y, $ scale_x, $ scale_y), которая позволяет вам это делать.
Spreadsheet :: WriteExcel позволяет вставлять диаграммы из существующих файлов (с некоторыми оговорками).
См. Следующие под- документ на Spreadsheet :: WriteExcel Charts и файлы примеров в дистрибутиве, такие как этот .
PS Я являюсь автором этого модуля.