Использование PDO и MYSQLi является хорошей практикой для предотвращения инъекций SQL, но если вы действительно хотите работать с функциями и запросами MySQL, было бы лучше использовать
$unsafe_variable = mysql_real_escape_string($_POST['user_input']);
Есть больше возможностей для предотвращения этого: например, идентификация - если ввод представляет собой строку, число, символ или массив, есть так много встроенных функций для обнаружения этого. Кроме того, было бы лучше использовать эти функции для проверки входных данных.
$unsafe_variable = (is_string($_POST['user_input']) ? $_POST['user_input'] : '');
$unsafe_variable = (is_numeric($_POST['user_input']) ? $_POST['user_input'] : '');
И гораздо лучше использовать эти функции для проверки входных данных с помощью mysql_real_escape_string
.
Виртуальное наследование используется для решения проблемы DDD (Ужасный Ромб на Деривации).
Взгляд на следующий пример, где у Вас есть два класса, которые наследовались тому же базовому классу:
class Base
{
public:
virtual void Ambig();
};
<час> class C : public Base
{
public:
//...
};
class D : public Base
{
public:
//...
};
<час> Теперь, Вы хотите создать новый класс, который наследовался и C и классам D (который оба наследовали Основу:: Ambig () функция):
class Wrong : public C, public D
{
public:
...
};
при определении "Неправильного" класса выше Вы на самом деле создали DDD (Ромбовидная проблема Деривации), потому что Вы не можете звонить:
Wrong wrong;
wrong.Ambig();
Это - неоднозначная функция, потому что она определяется дважды:
Wrong::C::Base::Ambig()
И:
Wrong::D::Base::Ambig()
для предотвращения этого вида проблемы, необходимо использовать виртуальное наследование, которое будет знать для обращения к праву Ambig()
функция.
Так - определите:
class C : public virtual Base
class D : public virtual Base
class Right : public C, public D