Конфликт Ctrl-V VIM с Windows Paste

Несколько рекомендаций по экранированию специальных символов в операторах SQL.

Не используйте MySQL , это расширение устарело, используйте MySQLi или PDO .

MySQLi

Для ручного экранирования специальных символов в строке вы можете использовать функцию mysqli_real_escape_string .

Пример:

$mysqli = new mysqli( 'host', 'user', 'password', 'database' );
$mysqli->set_charset( 'charset');

$string = $mysqli->real_escape_string( $string );
$mysqli->query( "INSERT INTO table (column) VALUES ('$string')" );

Для автоматического экранирования значений с помощью подготовленных операторов , используйте mysqli_prepare и mysqli_stmt_bind_param , где для соответствующего преобразования должны быть указаны типы для соответствующих переменных связывания:

Пример:

$stmt = $mysqli->prepare( "INSERT INTO table ( column1, column2 ) VALUES (?,?)" );

$stmt->bind_param( "is", $integer, $string );

$stmt->execute();

Независимо от того, используете ли вы подготовленные операторы или mysqli_real_escape_string, вам всегда нужно знать тип входных данных, с которыми вы работаете.

Итак, если вы используете подготовленный оператор, вы должны указать типы переменных для функции mysqli_stmt_bind_param.

И использование mysqli_real_escape_string для, как сказано в названии, означает экранирование специальных символов в строке, поэтому оно не сделает целые числа безопасными. Цель этой функции - предотвратить разрыв строк в операторах SQL и повреждение базы данных, которое она может вызвать. mysqli_real_escape_string - полезная функция при правильном использовании, особенно в сочетании с sprintf.

Пример:

$string = "x' OR name LIKE '%John%";
$integer = '5 OR id != 0';

$query = sprintf( "SELECT id, email, pass, name FROM members WHERE email ='%s' AND id = %d", $mysqli->real_escape_string( $string ), $integer );

echo $query;
// SELECT id, email, pass, name FROM members WHERE email ='x\' OR name LIKE \'%John%' AND id = 5

$integer = '99999999999999999999';
$query = sprintf( "SELECT id, email, pass, name FROM members WHERE email ='%s' AND id = %d", $mysqli->real_escape_string( $string ), $integer );

echo $query;
// SELECT id, email, pass, name FROM members WHERE email ='x\' OR name LIKE \'%John%' AND id = 2147483647

107
задан Conspicuous Compiler 18 March 2015 в 05:01
поделиться

5 ответов

От документация VIM :

С тех пор CTRL V используется для вставки, Вы не можете использовать его для запуска blockwise Визуального выбора. Можно использовать CTRL Q вместо этого. Можно также использовать CTRL Q в режиме Режима вставки и Командной строки для получения старого значения CTRL V . Но CTRL Q не работает на терминалы, когда он используется для потока управления.

141
ответ дан udondan 24 November 2019 в 03:38
поделиться

Проверьте свой _vimrc файл и посмотрите, получает ли он mswin.vim. Тот сценарий отображает ^v на вставку. Можно или удалить ту строку на _vimrc файле или отключить отображающиеся команды непосредственно на mswin.vim.

Делают a: справка ведет себя на энергии для большего количества информации

39
ответ дан jop 24 November 2019 в 03:38
поделиться

Если эта строка в Вашем _vimrc беспокоит Вас:

behave mswin

тогда удаляют ту строку.

20
ответ дан Windows programmer 24 November 2019 в 03:38
поделиться

Я не уверен, что существует много, можно сделать об этом. Можно использовать Ctrl Q вместо этого все же.

7
ответ дан udondan 24 November 2019 в 03:38
поделиться

Комбинация советов jop (ищущих mswin.vim в файле _vimrc по умолчанию) и советов "программиста Windows" (избавляясь от строки "поведенческий mswin") для меня сработала .

(мой представитель слишком низкий, чтобы голосовать за них или объединять их - кто-то уберет это для меня, или я вернусь, когда мой представитель повысится)

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

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