İç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 ;)
Çok faydalı olmuş eline sağlık..
Çok faydalı ve başarılı bir makale dostum, devamını bekliyoruz.
Çok faydalı ve başarılı bir makale dostum, devamını bekliyoruz.