Параметрированный запрос И проверка ввода - это путь. Существует множество сценариев, в которых может произойти 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 (при эвакуации Недостаточно)
Диапазон является объектом. Присвоение объектов требует использования ключевого слова НАБОРА и похоже на Вас, забыл один в Вашей функции 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
Изменение последняя строка в Test2 к:
Set Test2 = rg
Вы также можете вернуть 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
является массивом, а диапазон, содержащий несколько столбцов строк, составляет много раз быстрее, чем выполнение операций одну за другой непосредственно над ячейками.