Есть так много ответов для PHP и MySQL, но вот код для PHP и Oracle для предотвращения SQL-инъекций, а также регулярное использование драйверов oci8:
$conn = oci_connect($username, $password, $connection_string);
$stmt = oci_parse($conn, 'UPDATE table SET field = :xx WHERE ID = 123');
oci_bind_by_name($stmt, ':xx', $fieldval);
oci_execute($stmt);
Использование static_cast
: это - самый узкий бросок, который точно описывает то, какое преобразование сделано здесь.
There’s неправильное представление, что использование reinterpret_cast
было бы лучшим соответствием, потому что это means “completely игнорирует безопасность типов и просто бросок от до B”.
Однако этот doesn’t на самом деле описывают эффект reinterpret_cast
. Скорее reinterpret_cast
имеет много значений, для всех из которых содержит это, отображение “the, выполненное reinterpret_cast
, определяется реализацией. ” [5.2.10.3]
, Но в особом случае кастинга от void*
до T*
отображение абсолютно четко определен по стандарту; а именно, для присвоения типа указателю без типов, не изменяя его адрес.
Это - причина предпочесть static_cast
.
Кроме того, и возможно более важный, то, что каждое использование reinterpret_cast
совершенно опасно, потому что оно преобразовывает что-либо во что-либо еще действительно (для указателей), в то время как static_cast
намного более строго, таким образом обеспечивая лучший уровень защиты. Это уже сохранило меня от ошибок, где я случайно пытался принудить один тип указателя в другого.
Мое персональное предпочтение основано на грамотности кода как это:
void* data = something;
MyClass* foo = reinterpret_cast<MyClass*>(data);
foo->bar();
или
typedef void* hMyClass; //typedef as a handle or reference
hMyClass = something;
const MyClass& foo = static_cast<MyClass&>(*hMyClass);
foo.bar();
они оба делают то же в конце, но static_cast кажется более соответствующим в промежуточном программном обеспечении, среда приложения, в то время как дают иное толкование броску, больше походит на что-то, что Вы видели бы в библиотеке IMHO низшего уровня.
Это - сложный вопрос. С одной стороны, Konrad высказывает точное мнение об определении спецификации для reinterpret_cast, хотя на практике это, вероятно, делает то же самое. С другой стороны, если Вы бросите между типами указателей (как довольно распространено при индексации в памяти через символ*, например), , то static_cast генерирует ошибку компилятора, и Вы будете вынуждены использовать reinterpret_cast так или иначе.
На практике я использую reinterpret_cast, потому что это является более описательным из намерения операции броска. Вы могли, конечно, изложить доводы для различного оператора для обозначения указателя, дает иное толкование только (который гарантировал тот же возвращенный адрес), но нет один в стандарте.
I suggest using the weakest possible cast always.
reinterpret_cast
may be used to cast a pointer to a float
. The more structure-breaking the cast is, the more attention using it requires.
In case of char*
, I'd use c-style cast, until we have some reinterpret_pointer_cast
, because it's weaker and nothing else is sufficient.