VBA может функционировать в возврате Excel диапазон?

Параметрированный запрос И проверка ввода - это путь. Существует множество сценариев, в которых может произойти SQL-инъекция, хотя используется mysql_real_escape_string().

Эти примеры уязвимы для SQL-инъекции:

$offset = isset($_GET['o']) ? $_GET['o'] : 0;
$offset = mysql_real_escape_string($offset);
RunQuery("SELECT userid, username FROM sql_injection_test LIMIT $offset, 10");

или

$order = isset($_GET['o']) ? $_GET['o'] : 'userid';
$order = mysql_real_escape_string($order);
RunQuery("SELECT userid, username FROM sql_injection_test ORDER BY `$order`");

В обоих случаях вы не можете использовать ' для защиты инкапсуляции.

Источник : Непредвиденная инъекция SQL (при эвакуации Недостаточно)

25
задан Joel Spolsky 15 June 2012 в 03:44
поделиться

3 ответа

Диапазон является объектом. Присвоение объектов требует использования ключевого слова НАБОРА и похоже на Вас, забыл один в Вашей функции Test2:

Function Test1() As Integer
    Dim rg As Range
    Set rg = Test2()
    Test1 = rg.Cells(1, 1).Value
End Function

Function Test2() As Range
    Dim rg As Range
    Set rg = Range("A1:B1")
    Set Test2 = rg         '<-- Don't forget the SET here'
End Function
46
ответ дан BradC 28 November 2019 в 18:27
поделиться

Изменение последняя строка в Test2 к:

Set Test2 = rg
4
ответ дан Adam Lear 28 November 2019 в 18:27
поделиться

Вы также можете вернуть Variant () , который представляет собой массив значений. Вот пример функции, которая меняет значения из диапазона в новый диапазон:

Public Function ReverseValues(ByRef r_values As Range) As Variant()
    Dim i As Integer, j As Integer, N As Integer, M As Integer
    Dim y() As Variant
    N = r_values.Rows.Count
    M = r_values.Columns.Count
    y = r_values.value    'copy values from sheet into an array
    'y now is a Variant(1 to N, 1 to M) 
    Dim t as Variant
    For i = 1 To N / 2
        For j = 1 To M
            t = y(i, j)
            y(i, j) = y(N - i + 1, j)
            y(N - i + 1, j) = t
        Next j
    Next i

    ReverseValues = y
End Function

На листе вы должны применить эту функцию как формулу массива (с Ctrl - Shift ] - Введите ) с соответствующим количеством выбранных ячеек. Детали функции Swap () здесь не важны.

Обратите внимание , что для многих строк это очень эффективно. Выполнение операций x = Range.Value и Range.Value = x , когда x является массивом, а диапазон, содержащий несколько столбцов строк, составляет много раз быстрее, чем выполнение операций одну за другой непосредственно над ячейками.

8
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: