<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WEB ÜZERİNE</title>
	<atom:link href="http://umut.kirgoz.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://umut.kirgoz.com</link>
	<description>Bir başka programcılık bloğu</description>
	<lastBuildDate>Thu, 15 Sep 2011 08:27:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL&#8217;de auto_increment alanın son değerini almak</title>
		<link>http://umut.kirgoz.com/2011/09/15/mysqlde-auto_increment-alanin-son-degerini-almak/</link>
		<comments>http://umut.kirgoz.com/2011/09/15/mysqlde-auto_increment-alanin-son-degerini-almak/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 08:26:52 +0000</pubDate>
		<dc:creator>umut.kirgoz</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://umut.kirgoz.com/?p=88</guid>
		<description><![CDATA[Bazı durumlarda MySQL&#8217;de işlem yaptığınız tablodaki auto_increment alanın (genelde tablonun ID alanı) son değerine ihtiyaç duyarız. MySQL&#8217;in LAST_INSERT_ID() fonksiyonu bize son ID değerini döndürür. Ama bu fonksiyonun size bir değer döndürebilmesi için mutlaka öncesinde bir INSERT sorgusunun çalıştırılmış olması gerekmektedir. Örneğin aşağıdaki sorgu tek başına çalıştırıldığında 0 değeri döndürecektir. SELECT LAST_INSERT_ID(); Konuyu daha detaylı incelemek [...]]]></description>
			<content:encoded><![CDATA[<p>Bazı durumlarda MySQL&#8217;de işlem yaptığınız tablodaki auto_increment alanın (genelde tablonun ID alanı) son değerine ihtiyaç duyarız.</p>
<p><span id="more-88"></span></p>
<p>MySQL&#8217;in LAST_INSERT_ID() fonksiyonu bize son ID değerini döndürür. Ama bu fonksiyonun size bir değer döndürebilmesi için mutlaka öncesinde bir INSERT sorgusunun çalıştırılmış olması gerekmektedir.</p>
<p>Örneğin aşağıdaki sorgu tek başına çalıştırıldığında 0 değeri döndürecektir.<br />
<code>SELECT LAST_INSERT_ID();</code></p>
<p>Konuyu daha detaylı incelemek için aşağıdaki tablo yapısını kullanacağız:<br />
<code>CREATE TABLE names (<br />
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,<br />
name VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL<br />
) ENGINE = MYISAM;<br />
</code></p>
<p>Aşağıdaki örnekte tabloya bir satır veri girişi yaptıktan sonra son ID değerini alıyoruz:<br />
<code>INSERT INTO names (name) VALUES ('Ali');<br />
SELECT LAST_INSERT_ID();</code></p>
<p>Sorgu sonucu olarak bize son kaydın ID değeri olan <strong>1</strong> dönecektir.</p>
<p>Yukarıda anlatılan kullanım oldukça yaygındır.</p>
<p>Peki ya öncesinde herhangi bir <strong>INSERT</strong> sorgusu olmayan durumlarda, tablonun bir sonraki kayıtta alacağı ID değerine ihtiyacımız olursa ne yapacağız?</p>
<p>Bu durumda yardımımıza MySQL&#8217;in <strong>SHOW TABLE STATUS</strong> komutu yardımımıza koşuyor:<br />
<code>SHOW TABLE STATUS WHERE name = 'names'</code></p>
<p>Yukarıda sorgu sonucunda bize dönecek rowset içindeki <strong>Auto_increment</strong> alanından bir sonraki ID değerini alabiliriz.</p>
]]></content:encoded>
			<wfw:commentRss>http://umut.kirgoz.com/2011/09/15/mysqlde-auto_increment-alanin-son-degerini-almak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL&#8217;de IP adreslerini depolama</title>
		<link>http://umut.kirgoz.com/2011/09/04/mysqlde-ip-adreslerini-depolama/</link>
		<comments>http://umut.kirgoz.com/2011/09/04/mysqlde-ip-adreslerini-depolama/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 22:16:51 +0000</pubDate>
		<dc:creator>umut.kirgoz</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[veritabanı]]></category>

		<guid isPermaLink="false">http://umut.kirgoz.com/?p=24</guid>
		<description><![CDATA[Standart Internet Formatı Çoğu kişiye göre IP adreslerini veritabanı tablolarında karakter dizisi (string) olarak depolamak oldukça kolaydır. İlgili tabloda VARCHAR (11) türünde bir alan oluşturulur ve 192.168.1.10 gibi IP adresleri kolayca anlaşılır bir şekilde depolanabilir. Neden sayı olarak olmasın? Aslında IP adresleri birer sayıdır ve çok daha efektif olarak depolanabilirler. Hatta PHP&#8217;de bu işlemi gerçekleştirmek [...]]]></description>
			<content:encoded><![CDATA[<h3>Standart Internet Formatı</h3>
<p>Çoğu kişiye göre IP adreslerini veritabanı tablolarında karakter dizisi (string) olarak depolamak oldukça kolaydır. İlgili tabloda VARCHAR (11) türünde bir alan oluşturulur ve <strong>192.168.1.10</strong> gibi IP adresleri kolayca anlaşılır bir şekilde depolanabilir.</p>
<h3><span id="more-24"></span>Neden sayı olarak olmasın?</h3>
<p>Aslında IP adresleri birer sayıdır ve çok daha efektif olarak depolanabilirler. Hatta PHP&#8217;de bu işlemi gerçekleştirmek için <a href="http://php.net/ip2long" target="_blank">ip2long()</a> adında bir fonksiyon bulunur ki IP<sub>v4</sub> standard formattaki bir IP adresini bir sayıya (long integer) dönüştürür. Sonuç olarak, IP adresleri standart formata göre 1/3 oranında yer kaplar, sorgular ve indekslemeler hızlanır.<br />
<code>$ip='192.168.1.10';<br />
echo ip2long($ip);</code></p>
<p><strong>-1062731510</strong> çıktısını verecektir.</p>
<blockquote><p>Not: Çünkü PHP de tamsayılar negatif veya pozitif olabilir ve birçok IP adresi yukarıdaki örnekte olduğu gibi negatif sonuç döndürebilir.Bu sorunu çözmek için <a href="http://php.net/sprintf" target="_blank">sprintf()</a> veya <a href="http://php.net/printf" target="_blank">printf() </a>fonksiyonlarını<strong><em> &#8220;%u&#8221;</em></strong> parametresi kullanılarak pozitif tam sayılar elde edilebilir.</p></blockquote>
<p><code>$ip='192.168.1.10';<br />
echo ip2long($ip);<br />
printf("%u\n", ip2long($ip));</code></p>
<p><strong>3232235786</strong> sonucunu verir ve bu değer MySQL&#8217;de INT(11) bir alanda depolabilir.</p>
<p>Süpriz bir şekilde 64bit Linux sistemlerde ip2long fonksiyonu negatif bir değer döndürmemektedir.Bunun nedenini araştırdığımda tam sayıların 64bit sistemlerde 32bit yerine 64bit olarak tutulması ve 32bitlerdeki 2147483647 sınırının bulunmaması olduğunu gördüm. Bu durumu 64bit Windows sistemlerde deneme fırsatım maalesef olmadı.</p>
<p>Ben yine de printf fonksiyon kullanımının uyumluluk açısından gerekli olduğunu düşünmekteyim.Zaten 64bit sistemlerde de bu fonksiyonun kullanımı herhangi bir sorun yaratmamakta.</p>
<h3>Standart formata dönüştürme</h3>
<p>long2ip() fonksiyonu yukarıda yapılan işlemin tersini gerçekleştirerek tam sayı (INT) olarak depolanmış IP adreslerini standart formata dönüştürür. Sayının pozitif veya negatif olması bir sorun teşkil etmez:</p>
<p><code>echo long2ip(ip2long($ip));<br />
echo long2ip(sprintf("%u\n", ip2long($ip))); </code></p>
<p>Her iki komut da <strong>192.168.1.10</strong> çıktısını verir.</p>
<h3>MySQL ile dönüştürme</h3>
<p>Alternatif ve belki de en efektif yöntem bu işi MySQL&#8217;in INET_ATON() fonksiyonunu kullanarak MySQL&#8217;e yaptırmak olabilir:<code>INSERT INTO `ip_addresses` INET_ATON('192.168.1.10'); will store 3232235786</code></p>
<p>Standart formatta verilen IP adresi tam sayı (<strong>3232235786</strong>) olarak tabloya kaydolacaktır.</p>
<p>Oluşan sayı daima ağ byte sıramasındadır. Örnekteki değer şu şekilde hesaplanmaktadır:</p>
<p><code>(192*256*256*256) + (168*256*256) + (1*256) + 10 = 3232235786</code></p>
<h3>Standart IP adresine geri dönüştürme</h3>
<p>Standart IP formatına geri dönüşüm için MySQL&#8217;in INET_NTOA() fonksiyonu kullanılabilir</p>
<p><code>SELECT INET_NTOA(3232235786);<br />
</code></p>
<p><strong>192.168.1.10</strong> sonucunu döndürür.</p>
<p>Yukarıda kullanılan iki fonksiyon MySQL 3.23.15 ve üstü versiyonlarda bulunmaktadır.</p>
]]></content:encoded>
			<wfw:commentRss>http://umut.kirgoz.com/2011/09/04/mysqlde-ip-adreslerini-depolama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>başlarken</title>
		<link>http://umut.kirgoz.com/2009/11/11/baslarken/</link>
		<comments>http://umut.kirgoz.com/2009/11/11/baslarken/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 10:18:10 +0000</pubDate>
		<dc:creator>umut.kirgoz</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[genel]]></category>

		<guid isPermaLink="false">http://umut.kirgoz.com/?p=12</guid>
		<description><![CDATA[merhabalar; yıllardır oluşturmayı düşünüp de, bir türlü içime sinecek şekilde oluşturamadığım sayfamı galiba sonunda açtım. terzi kendi söküğünü dikemez diye boşuna dememişler gerek.]]></description>
			<content:encoded><![CDATA[<p>merhabalar;</p>
<p>yıllardır oluşturmayı düşünüp de, bir türlü içime sinecek şekilde oluşturamadığım sayfamı galiba sonunda açtım. </p>
<p>terzi kendi söküğünü dikemez diye boşuna dememişler gerek. </p>
]]></content:encoded>
			<wfw:commentRss>http://umut.kirgoz.com/2009/11/11/baslarken/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

