Php & MySql (Veritabanı) İşlemleri

  < ? php 
     $db = "newdb"; 
     //connect to server with username and password 
     $connection = @mysql_connect ("localhost","root", "") or die (mysql_error()); 
     //connect to database 
     $result = @mysql_create_db($db, $connection) or die(mysql_error()); 
     if ($result) 
     { 
       echo"Database has been created!"; 
     } 
  ?>

Kimliği doğrula: Veritabanı tabanlı (Authenticate user: Database based)

  < ? php 
     function authenticate_user() 
     { 
       header('WWW-Authenticate: Basic realm="Secret Stash"'); 
       header("HTTP/1.0 401 Unauthorized"); 
       exit; 
     } 
     if (! isset($_SERVER['PHP_AUTH_USER'])) 
     { 
       authenticate_user(); 
     } 
     else 
     { 
       mysql_pconnect("localhost","authenticator","secret") or die("Can't connect to database server!"); 
       mysql_select_db("abcd") or die("Can't select authentication database!"); 
       $query = "SELECT username, pswd FROM user WHERE username='$_SERVER[PHP_AUTH_USER]' AND pswd=MD5('$_SERVER[PHP_AUTH_PW]')"; 
       $result = mysql_query($query); 
       // If nothing was found, reprompt the user for the login information. 
       if (mysql_num_rows($result) == 0) 
       { 
         authenticate_user(); 
       } 
     } 
  ? >

Veritabanı sorgusundan veri alın (Get data from database query)

   < ? php 
     $cnx = mysql_connect('mysql153.secureserver.net','abcd','password'); 
     mysql_select_db('abcd'); 
     $employees = @mysql_query('SELECT ID, FirstName FROM Employee'); 
     if (!$employees) 
     { 
       die('Error retrieving employees from database!'. 
       'Error: ' . mysql_error() ); 
     } 
     while ($employee = mysql_fetch_array($employees)) 
     { 
       $id = $employee['ID']; 
       $name = htmlspecialchars($author['Name']); 
       echo("$name "); 
  v     echo("$id"); 
     } 
   ? >

Veritabanı Bağlantısı-MySQL ile bağlantı kurma (Database Connection-establish a connection with MySQL)

•Connect database connections

  < ? php 
     $host="mysql153.secureserver.net"; 
     $uname="abcd"; 
     $pass="password"; 
     $connection= mysql_connect ($host, $uname, $pass); 
     if (! $connection) 
     { 
       die ("A connection to the Server could not be established!"); 
     } 
     else 
     { 
       echo "User root logged into to MySQL server ",$host," successfully."; 
     } 
  ?> 

•Close database connections

  < ? php 
     @mysql_connect("mysql153.secureserver.net","abcd","password") or die("Could not connect to MySQL server!"); 
     @mysql_select_db("abcd") or die("Could not select database!"); 
     echo "You're connected to a MySQL database!"; 
     mysql_close(); 
  ? >

MYSQL COMMANDS AND USE

MYSQL COMMANDS AND USE
PHP 4 version of the mysql commands and short descriptions

PHP 4 version of MySQL, and short descriptions of all commands that can be used for communication.
mysql_affected_rows
The number of rows affected by a previous transaction.

mysql_close
Closes the specified mysql connection.

mysql_connect
Opens a database connection to the server.

mysql_create_db
Opens in MySQL database.

mysql_data_seek
The result is the order line.

mysql_db_query
Sends the query to MySQL.

mysql_drop_db
Deletes the database server.

mysql_errno
MySQL gives the error number in the previous process.

mysql_error
MySQL gives the error message, the previous process.

mysql_fetch_array
The results of the array variable is.

mysql_fetch_field
As a result, the table is the name of the object.

mysql_fetch_lenghts
The result is the length of the array variable table.

mysql_fetch_object
Gets a result row as an object.

mysql_fetch_row
Variable table, you get a result.

mysql_field_name
The result of the name of the table gives the result table.

mysql_field_seek
Index that takes place as a result table.

mysql_field_table
The domain name of the table gives the result.

mysql_field_type
The resulting field indicates what type.

mysql_field_flags
The resulting space is defined which specifies the type of extra parameters.

mysql_field_len
Field gives the length of the resulting database.

mysql_free_result
Frees the memory assigned to the results.

mysql_insert_id
Returns the value of the automated data placement to the previous data.

mysql_list_fields
The resulting lists of all the table fields.

mysql_list_dbs
Lists all the databases on the server.

mysql_list_tables
Lists all the tables in the database.

mysql_num_fields
The resulting field gives the number.

mysql_num_rows
Returns the number of rows in result.

mysql_pconnect
Defines a permanent connection to the server.

mysql_query
Sends the query to the database.

mysql_result
The results of the query are returned.

mysql_select_db
Select from the server database.

mysql_tablename
To belong to the given name of the table gives the area.

SQL COMMANDS
Database Created

Database_ismi CREATE DATABASE;

EX: CREATE DATABASE, Mersin;

Created in the database table

CREATE TABLE database_ismi;

EX: CREATE DATABASE students;

Adding Data to SQL in the command

INSERT INTO table_name VALUES (‘Data1’, ‘veri2’, ‘veri3’,…..);

Crafts table command to add a new profession

EX: INSERT INTO jobs VALUES (’11 ‘,’ Teacher ‘, ’12’, ’20 ‘);

eg: INSERT INTO Students VALUES (23, ‘Length’, ‘GULER’);

Getting Data from the table command (list command)

SELECT kolon1, kolon2, kolon3 colony …. FROM table_name;
SELECT * FROM table_name (to take all);

eg: SELECT id, kayitno FROM Students;

eg: SELECT id, meslekno, meslekismi, girissaati, cikissaati FROM professions;

eg: SELECT name, surname, address FROM staff;

Ranking of the captured data from a table

ORDER BY domain, ASC; (ASC)
Domain, an ORDER BY DESC; (DESC)

EX: SELECT id, meslekno, meslekismi, girissaati, cikissaati FROM jobs ORDER BY ASC meslekismi;
EX: SELECT id, meslekno, meslekismi, girissaati, cikissaati FROM jobs ORDER BY DESC meslekismi;

Dates of birth of the same name, last name, sorted according to the shape of a data
eg: SELECT id, name, last name, dtarihi DTARİH FROM staff ORDER BY DESC, name, surname, ASC;

Any SQL command that operate according to a Contingent (Required Instruction)

WHERE condition şart_alanı şart_ifadesi (=,<,>)

eg: SELECT id, name, last name, dtarihi FROM staff WHERE name = ‘bob’;
eg: SELECT id, name, last name, dtarihi FROM staff WHERE dtarihi <’01 .01.1967 ‘ORDER BY DESC BASE;

TABLE

id name salary meslekid meslekadi address Sayad dtarihi Dyer

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer Dyer FROM WHERE costs plus = ‘London’;

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer FROM WHERE salary costs plus> 300 ORDER BY salary DESC;

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer Dyer FROM WHERE costs plus = ‘London’ AND meslekadi = ‘doctor’ ORDER BY NAME ASC;

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer FROM WHERE salary costs plus <250 OR meslekadi = ‘servant’ ORDER BY NAME ASC;

Between the two Vari Processing Command

bakilacak_alan BETWEEN value1 AND value2

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer FROM WHERE salary costs plus BETWEEN 200 AND 300 ORDER BY NAME, LASTNAME DESC;

eg: SELECT id, name, Sayad, dtarihi, salaries, meslekid, meslekadi the address s, Dyer FROM WHERE costs plus dtarihi BETWEEN ’06 .05.1989 ‘AND ’01 .01.2000’;

IN COMMAND

bakilacak_alan IN (value1, value2, …., the value of value)

teknikservis IT purchase accounting

eg: SELECT * FROM WHERE meslekadi costs plus IN (‘IT’, ‘accounting’, ‘purchase’, ‘teknkservi s’)

eg: SELECT * FROM WHERE costs plus meslekadi = ‘IT’ OR meslekadi = ‘accounting’ OR meslekadi = ‘purchase’ OR meslekadi = ‘teknkservis’;

Search within the command

LIKE bakilacak_alan bakilacak_deger note (not important where the bay%)

eg: SELECT * FROM WHERE ıcretler address LIKE ‘% host%’

eg: SELECT * FROM WHERE ıcretler address LIKE ‘% Turkey’

Relational Tables

personnel

id, name, surname, address, birthplace, sicilno, isebaslama, with sex, medenidurumu, dtarih

costs plus
id, per_sicil_no, aylikucret, sigortaprimi, yemekyardi, yakityardimi

==========================================

eg: SELECT name, surname, aylikucret FROM staff, fees WHERE sicilno = per_sicil_no;

eg: SELECT name, last name, salary FROM staff, fees sicilno = per_sicil_no AND WHERE Birthplace = ‘London’ AND address LIKE ‘% istanbul’;
ie: more than 300 salary and insurance of the underlying

SELECT name, surname, sigortapirimi FROM staff, fees AND WHERE per_sicil_no aylikucret sicilno => 300 AND sigortaprimi> 0;
eg: for 15 years, the employee’s salary under 200 YTL firstname.lastname yenimahallede based staff, and address lists pprogram

SELECT name, surname, address FROM staff, fees sicilno = per_sicil_no AND WHERE aylikucret <200 AND address LIKE ‘% host%’ AND isebaslama BETWEEN (’07 .05.1991 ‘AND ’06 .05.1992’);

EX: NAME AND E accounting and computing unmarried women 30 years of age working in any of buying a small salary that more than 100 YTL

SELECT * FROM staff, fees
WHERE sicilno = per_sicil_no
AND meslekadi = ‘accounting’ OR meslekadi = ‘IT’ OR meslekadi = ‘purchase’
AND name LIKE ‘E%’ AND sex = ‘Sex’
AND medenidurumu = ‘single’
AND dtarih> ’01 .011977 ‘
AND aylikucret> 100;

Data Delete command from the table

DELETE FROM table_name WHERE condition

DELETE FROM wages, staff WHERE AND aylikucret per_sicil_no sicilno = <100;

eg registration number 123 that deletes the record from the database program

DELETE FROM wages, staff WHERE per_sicil_no = ‘123 ‘AND sicilno = ‘123’;

Data update command

UPDATE table_name SET value1 = domain1, domain2 = value2 … FieldName = value;

A neighborhood W of the street address of 123 registration number of the personnel of Ankara Yenimahalle

UPDATE staff SET address = ‘A street Yenimahalle Ankara neighborhood W’ WHERE sicilno = ‘123 ‘;

Costs plus aylikucret * UPDATE SET aylikucret = 1.2;

UPDATE wages, staff SET ylikucret = aylikucret-100 WHERE meslekadi = ‘IT’ AND sicilno = per_sicil_no;

Grouping Commands

The largest command:

SELECT MAX (field_name) FROM table_name

the maximum salary of the staff:
SELECT MAX (aylikucret) FROM costs plus

ie, the more fuel-assistance program, showing the salary of the staff and the registration number

SELECT aylikucret, per_sicil_no, MAX (yakityardimi) FROM costs plus

Least-Command:

SELECT MIN (field_name) FROM table_name

TOTAL ACQUISITION COMMAND:

SELECT SUM (field_name) FROM table_name

the total fuel subsidy:
SELECT SUM (yakityardimi) FROM Fees;

Average command:

SELECT AVG (field_name) FROM table_name

SELECT AVG (aylikucret) FROM wages, staff WHERE meslekadi = ‘IT’;
SELECT AVG (yakiyyardimi) FROM wages, staff WHERE meslekadi = ‘accounting’ AND gender = ‘Female’;

RECORD NUMBER OF COMMAND

SELECT COUNT (*) FROM table_name

SELECT COUNT (*) FROM staff;

SINGLE RECORD NUMBER OF COMMAND

SELECT COUNT (Distict field_name) FROM table_name

There are many different family group working with us

SELECT COUNT (Distict Sayad) FROM staff

Our company has several different departments.

SELECT COUNT (Distict meslekadi) FROM staff

Mysql’de If Koşulunun Kullanımı

If, Else If, Else yapısı hemen hemen her dilde bulunuyor. Ancak Mysql’de bu koşulun olduğundan habersiz bir çok kişi, mysql’den verileri çektikten sonra Php, Asp.net, Ruby On Rails, Python vb. bir çok server side (sunucu taraflı) dili kullanarak verileri ayıklama, değişkenlere atayarak kullanma vb. yolu tercih ediyor. Bu da gereksiz yere fazla kod yazılmasına, kaynak tüketimine ve dolayısıyla performans kaybına neden olabiliyor.

“Kategoriler” isminde ve id, ad, durum kolonlarından oluşan bir tablomuz olsun. Burada “durum” isimli kolonumuzun kategorinin “Aktif” veya “Pasif” durumunu temsil ettiğini düşünebilirsiniz. (Eğer kategori 0 ise yayında gözükmesin, 1 ise yayında gözüksün vb.) Bu tabloyu yönetim panelinde listelerken kategori adının ve durumunun listelenmesi gerekir. Bunun için durumu tablodan 0,1 gibi integer değerler ile alıp php vb. dilde if yazmak yerine biz direk mysql’den “aktif” veya “pasif” şeklinde alacağız.

IF KOŞULUNUN KULLANIMI

IF(KOŞUL, DOĞRUYSA BU DEĞERİ AL, YANLIŞSA BU DEĞERİ AL)

ÖRNEK KOD
SELECT  
    ad,  
    IF(durum = 1,’Aktif’,’Pasif’) AS durum  
    FROM  
    kategoriler

Mysql türkçe karekter sorunu

Biz phpciler için vazgeçilmez biricik veritabanımız Mysql,
hüzünlü bir sonbahar akşama MySQL 4.1.x versiyonunu tüm dünyaya duyurdu.
Burada garip olan bişey yoktu taki “Collation” denen kavramını görene kadar.
İlk gördügümde pek bir gereksiz gelmişti bu “Collation” kavramı bana.Hatta collation = sorunlar zincirinin ilk halkası olacağını daha ilk görüşte hissetmeye başlamıştım…Bu yeni gelen “Collation” olayı Türkçe karakterlerde sorun yaratıyor ve beni çileden çıkartıyordu. O zaman geçici bir çözüm olarak localhost da eski MySQL sürümü kullanarak acılarıma son vermiştim. (O anı kurtarma içgüdüsüydü bu sanırım) Fakat çalıştığım hostlarım çoktan yeni mysql e geçmişti. Artık çağa ayak uydurmanın zamanı gelmişti.

Bu “Collation” kavramı nedir, niye, çıktı nereden geldi başımıza, dertsiz başımıza dert mi katmak istiyor mysql programcıları diye düşünürken “Collation” kavramının mantığını ögrenince, bizim mysql programcı abilerimizin alınlarından öpmek geldi içimden.

MySQL’e “Collation” yapısını ekleyerek daha modern, gelişmiş ve onbinlerce dolarlık maliyeti olan veritabanlarındaki (Oracle gibi) bir standarda kavuşturmuşlardı biz gariban phpcileri; “Collation” olayının gelmesi ile sadece ilgili karakter setini yükleyerek gereksiz karakterlerden kaynaklanan (önceleri bütün dillere özgü karakter setlerini yükleyerek evrensel bir destek sağlıyordu mysql, çince gibi bir dil yapısı destegini bile yüklüyorduk bilgisayarımıza yada hostaki makinamıza ama ne gerek vardı ki, diye düşünüp geliştirmişler yeni “Collation” olayını) ağırlıktan kurtararak sorgu cevap sürelerinde kayda değer derecede azalmalar sağladığını öğrendim.Daha az cpu kullanarak daha hızlı sürede sorgu cevap mekanizmasına “Collation” yapısına geçiş ile kavuşmuş olduk.

Aslında ortada mysql türkçe karekter sorunu diye bir olay yoktur.Sorun bizim veri tabanlarımızı yanlış karakter setinde oluşturmamız ve server ayarlarınında birebir yanlış configürasyonundan kaynaklanmaktaymış.Ben bilgisayarımda appserv kullanırım.Herşeye öncelikle kendi bilgisayarımdaki karekter setinin dogru tanımlanması gerektiğini düşüneren başladım ve c:windows klasöründeki my.ini dosyasını editlemek için kolları sıvadım bu dosyayı açtım:
my.ini dosyasında ki default-character-set=latin1 şeklindeki satırları default-character-set=latin5 yaptım.içimde bir iş yapmanın saadeti ile arkama yaslanıp olayın kefini çıkartmayı düşünürken birden karekterlerin tekrar gümlediğini görünce hevesim yine kursağımda kaldı. Biraz daha kurcalayınca kullandığınız veritabanının dolayısıyla tabloların da ilgili Collation ayarlarının latin5_turkish_ci olması gerektiğini gördüm. Fakat ne yazık ki benim tablolarımdaki field’ların collationları latin1_swedish_ci idi.Mysql Standart olarak swedish geçip işlem yapıyor eger siz özel olarak seçmezseniz. Eger bunu degiştirmezsek bu sütunlara yollayacağınız kayıtlar ise, isveçce dili göz önünde bulundurularak girilir. Bundan çıkan sonuç şu: isveçcede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. karakter çıkıyor. Tablolarımızı oluştururken Türkçe dil grubuna ait yapı olan latin5_turkish_ci şeklinde ayarlamamız gerekiyor. latin5_turkish_ci tablo yapısı ile biz “ISO 8859-9 Latin-1 modification for Turkish (Latin-5) ” haline uygun yapıyı seçmiş oluyoruz.
Yeni tablo oluştururken mutlaka charset degerini latin5 olarak yaparak oluşturursak artık karekter sorunu yaşamayız

CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
deneme VARCHAR(150)
) CHARSET=latin5;

Eski veritabanları ne yapacak:
Sistem ayarları latin1 olarak ayarlı olan bir makinedesiniz, bu ayarları yapsanız bile bu sefer türkçe karakterlerin yerine sayfanızda soru işaretleri çıkacaktır ‘?’ gibi.Yukarıda anlattığım nedenden dolayı bu makina latin1_swedish_ci ayarlıdır. isveç dilinde türkçe karekterler olmadığından siz verileri girerken, mysql onları anscii yapıda yerleştirmiştir veritabanına.Örnegin siz “öküz” kelimesini veritabanınıza girmişseniz onun hücredeki degeri “&ouml ;k&uuml ;z” şeklindedir.
“Collation” olayının faydasını öküz örneginde daha iyi görüyorsunuz sanırım arkadaşlar.Veritabanından direk Türkçe yazılmış “öküz” kelimesini aramak başka “&ouml ;k&uuml ;z” kelimesi şeklinde aramak başka performans verir.
Bu sorunu çözmek için ise scriptinizde kullandığınız config.php yada baglantıyı yaptığınız kod satırının altına yani
mysql_select_db(“$dbname”)fonksiyonun altına aşağıdaki kodları eklerseniz sorununuz düzelir.

mysql_query("SET NAMES 'latin5'"); 
mysql_query("SET CHARACTER SET latin5"); 
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");