2015-08-07 3 views
2

Какая из них правильная?SQL SELECT statement в PHP

Возникли проблемы с одинарные кавычки против двойных кавычек в PHP и используя Oracle 11g дб ...

<?php 
$query1 = oci_parse($conn, 'SELECT * FROM SCHEMA.TABLE_A WHERE B_ID=' . $id); 
$query1 = oci_parse($conn, "SELECT * FROM SCHEMA.TABLE_A WHERE B_ID='" . $id . "'"); 
?> 
+1

если $ ID является числовым, то это не имеет значения. если $ id не является числовым (например, строки), то второй вариант - это опция ONLY ... и оба будут оставаться открытыми для потенциальных [SQL-инъекций] (http://bobby-tables.com) –

ответ

3

Если идентификатор Числовой, вы не должны процитировать значение. Если это строка символов, вы должны.

Независимо от того, что использование строковых манипуляций для создания инструкции SQL обычно является плохой практикой, которая делает ваше приложение уязвимым для атак SQL-инъекций. Вместо этого следует использовать подготовленное заявление:

$query1 = oci_parse($conn, 'SELECT * FROM SCHEMA.TABLE_A WHERE B_ID=:id'); 
oci_bind_by_name($query1, ":id", $id); 
oci_execute($query1);