スケーラブルでないOracleアプリケーションの作成方法に関する本を書く必要がある場合、その最初で唯一の章のタイトルは「バインドされた変数を使用しない」です。
Oracle Vice President、Tom Kite
最近、 AlexanderPHPの記事「初心者向けのSQLインジェクション。 パート1」。 その内容と解説によると、多くの開発者は、バインド変数が何であるか、なぜ使用する必要があるのか、どのような利点があるのかわからないように見えるかもしれません。 この記事では、これらの問題について少し説明します。
バインド変数の定義
, prepared statements, ( ; , ) — SQL- , SQL-. , :
insert into someTable(name) values(‘’);
, ? -, insert , 90% ORM; ( '') — . , , ():
$request = sql_prepare('insert into table(name) values(:1)'); /* insert into someTable(name) values(?);*/ sql_execute($request, Array(''));
, (:1, :2,...) . , , .
insert into someTable(name) values(‘’);
, , .
:
1. — , .
2. , .
3. SQL-.
.
— :
$request = sql_prepare('insert into table(name) values(:1)'); sql_execute($request, Array('')); sql_execute($request, Array('')); sql_execute($request, Array('')); sql_execute($request, Array(''));
SQL- , , — .
, SQL-. , SQL- - , , . — , , . , — «» ( , ). (, , MySQL ), «» . , SQL- — . 1 — , , — . :
sql_execute("insert into table(name) values('')"); sql_execute("insert into table(name) values('')"); sql_execute("insert into table(name) values('')"); sql_execute("insert into table(name) values('')");
( ), . , «» .
. — SQL- ( , , )? ( ), prepared statements – «» sql_execute (mysql_real_query, ),
, sql_execute, . . prepared statement – . , . , , , . ( MySQL C API, PostgreSQL C library).
: — PHP PDO , SQL- . ( StackOverflow):
$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
— , . . . ( — ).
, - ; , .
Robert');drop table students;
, , — , , .
, :
Rhaps107
mysql_real_escape_string? - ?
— mysql_real_escape_string , . . (, «» , , - ), .
@m_z21
PDO ORM . pdo , sql-.
ORM – . PDO ( MySQLi) , SQL injection , .
@VolCh21
(, ), . . mysql_* libmysql, mysqli/pdo ?
. mysqli::prepare — MySQL. , PHP. , ( ) , . « ».
, - , (prepared statements). , , . , , - , .
1. http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php — StackOverflow.
2. https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java — Java.
3. . Oracle . — .