İçerik
PHP’de mysql_fetch_array fonksyonun dikkat etmediğimiz bir parametresi daha vardır; $result_type!
result_type: mysql_fetch_array fonksyonunun, sorgudan dönen verilerin diziye atarkenki yöntemini belirtmeye yarar. 3 farklı result_type vardır: MYSQL_ASSOC, MYSQL_NUM, ve MYSQL_BOTH.
Örnekler için bir tablomuz olsun;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE `users` ( `id` INT(10) UNSIGNED NULL AUTO_INCREMENT, `user_name` VARCHAR(50) NULL, `password` VARCHAR(32) NULL, `email` VARCHAR(150) NULL, `activated` TINYINT(3) UNSIGNED NULL DEFAULT '1', PRIMARY KEY (`id`) ) COLLATE='utf8_turkish_ci' ENGINE=InnoDB; INSERT INTO `users` (`id`, `user_name`, `password`, `email`, `activated`) VALUES (1, 'ahmetertem', '123', 'deneme@deneme.com', 1), (2, 'deneme', '12345', 'deneme2@deneme.com', 1), (3, 'deneme 2', '1234567', 'deneme3@deneme.com', 0); |
id | user_name | password | activated | |
---|---|---|---|---|
1 | ahmetertem | 123 | deneme@deneme.com | 1 |
2 | deneme | 12345 | deneme2@deneme.com | 1 |
3 | deneme 2 | 1234567 | deneme3@deneme.com | 0 |
MYSQL_ASSOC
Gelen kayıtları, tablodaki field ve/veya aliasları ile keyleyerek atama yapar.
1 2 3 4 |
$query = mysql_query("select * from `users`;"); while($record = mysql_fetch_array($query, MYSQL_ASSOC)) { print_r($record); } |
Bu durumda diziye gelen keyler bu fieldlar olacaktır.
Ekran Çıktısı:
Array
(
[id] => 1
[user_name] => ahmetertem
[password] => 123
[email] => deneme@deneme.com
[activated] => 1
)
Array
(
[id] => 2
[user_name] => deneme
[password] => 12345
[email] => deneme2@deneme.com
[activated] => 1
)
Array
(
[id] => 3
[user_name] => deneme 2
[password] => 1234567
[email] => deneme3@deneme.com
[activated] => 0
)
MYSQL_NUM
Kayıtları 0 indexinden baslayarak keyleme yapar.
1 2 3 4 |
$query = mysql_query("select * from `users`;"); while($record = mysql_fetch_array($query, MYSQL_NUM)) { print_r($record); } |
Ekran Çıktısı:
Array
(
[0] => 1
[1] => ahmetertem
[2] => 123
[3] => deneme@deneme.com
[4] => 1
)
Array
(
[0] => 2
[1] => deneme
[2] => 12345
[3] => deneme2@deneme.com
[4] => 1
)
Array
(
[0] => 3
[1] => deneme 2
[2] => 1234567
[3] => deneme3@deneme.com
[4] => 0
)
MYSQL_BOTH
Kayıtları hem MYSQL_NUM, hem de MYSQL_ASSOC’daki gibi, yani ikisini de kullanarak diziye atama yapar.
1 2 3 4 |
$query = mysql_query("select * from `users`;"); while($record = mysql_fetch_array($query, MYSQL_BOTH)) { print_r($record); } |
Ekran Çıktısı:
Array
(
[0] => 1
[id] => 1
[1] => ahmetertem
[user_name] => ahmetertem
[2] => 123
[password] => 123
[3] => deneme@deneme.com
[email] => deneme@deneme.com
[4] => 1
[activated] => 1
)
Array
(
[0] => 2
[id] => 2
[1] => deneme
[user_name] => deneme
[2] => 12345
[password] => 12345
[3] => deneme2@deneme.com
[email] => deneme2@deneme.com
[4] => 1
[activated] => 1
)
Array
(
[0] => 3
[id] => 3
[1] => deneme 2
[user_name] => deneme 2
[2] => 1234567
[password] => 1234567
[3] => deneme3@deneme.com
[email] => deneme3@deneme.com
[4] => 0
[activated] => 0
)
mysql_fetch_array, varsayılan olan MYSQL_BOTH‘u kullanır, bu da demek oluyor ki RAM’de daha çok kayıt oluşur ve kullanılmıyorsa bu gereksiz bir işlemdir. Mümkün olduğunca MYSQL_ASSOC kullanın, eğer bir field name yoksa da aliaslarla işinizi çözün;
1 2 3 |
select count(*) from `users`; // yerine select count(*) as total_user from `users`; // kullanin |
Kaynak:
http://tr2.php.net/manual/en/function.mysql-fetch-array.php
Kolay gelsin ;)
Çetin Özdemir
Çok faydalı olmuş eline sağlık..
Buğra Demiriz
Çok faydalı ve başarılı bir makale dostum, devamını bekliyoruz.
FAHMI
Çok faydalı ve başarılı bir makale dostum, devamını bekliyoruz.