Сборка сообщения, из которой выходят с кодом 1

Я написал эту небольшую функцию несколько лет назад:

function sqlvprintf($query, $args)
{
    global $DB_LINK;
    $ctr = 0;
    ensureConnection(); // Connect to database if not connected already.
    $values = array();
    foreach ($args as $value)
    {
        if (is_string($value))
        {
            $value = "'" . mysqli_real_escape_string($DB_LINK, $value) . "'";
        }
        else if (is_null($value))
        {
            $value = 'NULL';
        }
        else if (!is_int($value) && !is_float($value))
        {
            die('Only numeric, string, array and NULL arguments allowed in a query. Argument '.($ctr+1).' is not a basic type, it\'s type is '. gettype($value). '.');
        }
        $values[] = $value;
        $ctr++;
    }
    $query = preg_replace_callback(
        '/{(\\d+)}/', 
        function($match) use ($values)
        {
            if (isset($values[$match[1]]))
            {
                return $values[$match[1]];
            }
            else
            {
                return $match[0];
            }
        },
        $query
    );
    return $query;
}

function runEscapedQuery($preparedQuery /*, ...*/)
{
    $params = array_slice(func_get_args(), 1);
    $results = runQuery(sqlvprintf($preparedQuery, $params)); // Run query and fetch results.   
    return $results;
}

Это позволяет запускать операторы в однострочном C # -ish String.Format, например:

runEscapedQuery("INSERT INTO Whatever (id, foo, bar) VALUES ({0}, {1}, {2})", $numericVar, $stringVar1, $stringVar2);

Он избегает использования типа переменной. Если вы попытаетесь параметризовать имена таблиц и столбцов, это будет терпеть неудачу, поскольку она помещает каждую строку в кавычки, которая является недопустимым синтаксисом.

ОБНОВЛЕНИЕ БЕЗОПАСНОСТИ: предыдущая версия str_replace разрешала инъекции, добавляя токены {#} в пользовательские данные. Эта версия preg_replace_callback не вызывает проблем, если замена содержит эти токены.

104
задан jdhurst 16 October 2013 в 14:31
поделиться

4 ответа

У нее были пространство на одни из имен папок в ее пути и никакие кавычки вокруг этого.

113
ответ дан Tim Scott 24 November 2019 в 04:04
поделиться

Как хорошую практику я предлагаю, чтобы Вы заменили событие сборки сообщения задача .

Копии Файла типа "build" мс
2
ответ дан Asher 24 November 2019 в 04:04
поделиться

Доберитесь , монитор процесса от SysInternals настроил его для наблюдения за Lunaverse. DbVerse (на Поле трактов) смотрят на операционный результат. Должно быть очевидно оттуда, что пошло неправильно

11
ответ дан Asher 24 November 2019 в 04:04
поделиться

Тот, у которого есть «Pings», помог меня ... но можно объяснить немного лучше ...

Для меня решение было изменить:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

на это:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

Надеюсь, это сработает для вас. : -)

57
ответ дан 24 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

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