- 17 Nis 2013
- 2,329
- 10
Arkadaşlar bu çok temel bir konu ancak belki bilmeyenler vardır.
Prepared statement yani üstteki örnek doğrudur ve SQL INJECTION'a engel olur. Altta vereceğim ikinci örnek ise yanlıştır. Bunun sebebi kullanıcadan $_GET[] yolu ile alınan değişkenlerin direkt olarak kullanılması ve prepared statement içinde kullanılmamasıdır.
Kod:
// hazırla ve veritabanına ekle
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
Kod:
$count_query = 'SELECT COUNT(*) as num_rows from students where hidden=0 ';
$query = 'SELECT id, first_name, last_name, birth_date from students where hidden=0 ';
$filters = '';
if ( ! empty( $first_name ) || ! empty( $last_name ) ) {
if ( isset( $_GET['first_name'] ) && ! empty( $_GET['first_name'] ) ) {
$filters .= "AND first_name LIKE '%{$_GET['first_name']}%' ";
}
if ( isset( $_GET['last_name'] ) && ! empty( $_GET['last_name'] ) ) {
$filters .= "AND last_name LIKE '%{$_GET['last_name']}%' ";
}
}
$page = $_GET['page'] ?? 1;
$query .= $filters . ' LIMIT 5 OFFSET ' . ( $page - 1 ) * 5;