Pdo Veritabanı Sınıfı

PHP
313 lines
<?php
// bağlantı ayarları///////////////////////////////////////////////////////////////////////////////
Class dbConfig extends PDO {
protected $dbConfig = array();
protected function createConfig() {
$this->dbConfig['host'] = 'localhost';
$this->dbConfig['username'] = 'root';
$this->dbConfig['password'] = '';
$this->dbConfig['dbname'] = 'test';
}
}
// veritabanı sınıfı //////////////////////////////////////////////////////////////////////////////
Class Database extends dbConfig {
protected $connection;
function __construct() {
parent::createConfig();
try{
$dsn = 'mysql:host=' . $this->dbConfig['host'] . ';dbname=' . $this->dbConfig['dbname'];
$this->connection = new PDO($dsn, $this->dbConfig['username'], $this->dbConfig['password']);
$this->connection->query("SET NAMES utf8");
$this->connection->query("SET CHARACTER SET utf8");
$this->connection->query("SET COLLATION_CONNECTION = 'utf8_general_ci");
return true;
}catch(PDOException $error){
$errorMesage = 'Hata : Veritabanı bağlantısı kurulamadı !<br>Hata Mesajı =>'.$error->getMessage();
return $errorMesage;
}
}
public function selectOr($table, $array = null) {
if($array == null){
$sql = "SELECT * FROM ".$table;
}else{
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."' or ";
}
}
$sql = "SELECT * FROM ".$table." WHERE ".$sqlString;
}
$select = $this->connection->query($sql);
if ($select) {
$row = $select->fetchAll();
return $row;
} else {
return false;
}
}
public function selectAnd($table, $array = null) {
if($array == null){
$sql = "SELECT * FROM ".$table;
}else{
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."' and ";
}
}
$sql = "SELECT * FROM ".$table." WHERE ".$sqlString;
}
$select = $this->connection->query($sql);
if ($select) {
$row = $select->fetchAll();
return $row;
} else {
return false;
}
}
public function selectOrLimit($table, $array = null, $limit, $start = null) {
if($start == null){
$limitStr = "LIMIT ".$limit;
}else{
$limitStr = "LIMIT ".$start.", ".$limit;
}
if($array == null){
$sql = "SELECT * FROM ".$table." ".$limitStr;
}else{
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."' or ";
}
}
$sql = "SELECT * FROM ".$table." WHERE ".$sqlString." ".$limitStr;
}
$select = $this->connection->query($sql);
if ($select) {
$row = $select->fetchAll();
return $row;
} else {
return false;
}
}
public function selectAndLimit($table, $array = null, $limit, $start = null) {
if($start == null){
$limitStr = "LIMIT ".$limit;
}else{
$limitStr = "LIMIT ".$start.", ".$limit;
}
if($array == null){
$sql = "SELECT * FROM ".$table." ".$limitStr;
}else{
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."' and ";
}
}
$sql = "SELECT * FROM ".$table." WHERE ".$sqlString." ".$limitStr;
}
$select = $this->connection->query($sql);
if ($select) {
$row = $select->fetchAll();
return $row;
} else {
return false;
}
}
public function insert($table, $array) {
$columns = implode(", ", array_keys($array));
$values = implode("',' ", array_values($array));
$sql = "INSERT INTO ".$table."(".$columns.") VALUES ('".$values."')";
$insert = $this->connection->query($sql);
if ($insert) {
return $this->connection->lastInsertId($table);
} else {
return false;
}
}
public function update($table, $id, $array) {
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."', ";
}
}
$sql = "UPDATE ".$table." SET ".$sqlString." WHERE id=" . $id;
$update = $this->connection->query($sql);
if ($update) {
return true;
} else {
return false;
}
}
public function delete($table, $id) {
$sql = 'DELETE FROM ' . $table . ' WHERE id=' . $id;
$delete = $this->connection->exec($sql);
if ($delete) {
return true;
} else {
return false;
}
}
public function query($sql) {
$query = $this->connection->query($sql);
if ($query) {
return $query;
} else {
return false;
}
}
public function count($table, $array = null) {
if($array == null){
$sql = "SELECT count(*) from " . $table;
}else{
$columns = array_keys($array);
$values = array_values($array);
$sqlString = "";
for($i=0;$i<count($columns);$i++){
if($i==count($columns)-1){
$sqlString .= $columns[$i]." = '".$values[$i]."' ";
}else{
$sqlString .= $columns[$i]." = '".$values[$i]."' and ";
}
}
$sql = "SELECT count(*) from " . $table. " WHERE ". $sqlString;
}
$count = $this->connection->prepare($sql);
$count->execute();
return $count->fetchColumn();
}
function __destruct() {
$this->connection = null;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
$db = new Database;
//Insert Sorgusu
$userArray = array(
'username' => 'deneme',
'password' => md5('123456'),
'full_name' => 'Deneme DENEME',
'email' => 'deneme@deneme.com',
'auth' => 'user',
'lang' => 'tr'
);
$table = "users";
$db->insert($table, $userArray);
//Update Sorgusu
$userArray = array(
'username' => 'deneme1',
'password' => md5('1234'),
'lang' => 'en'
);
$id=3;
$table = "users";
$db->update($table,$id, $userArray);
//Delete Sorgusu
$id=3;
$table = "users";
$db->delete($table,$id);
//Count Sorgusu Tüm Tablo
$table = "users";
$db->count($table);
//Count Sorgusu Sütun
$sayılacak = array(
'lang' => 'tr',
'auth' => 'admin'
);
$table = "users";
$db->count($table,$sayılacak);
//Select and Sorgusu
$login = array(
'username' => 'username',
'password' => md5('password');
$user = $db->selectAnd("users", $login);
print_r($user);
//Select or Sorgusu
$yetkili = array(
'username' => 'username',
'auth' => 'admin');
$yetkili = $db->selectOr("users", $yetkili);
//eğer kayıt varsa herzaman iki boyutlu bir dizi döner yoksa boş döner
print_r($yetkili);
//Select or Limit Sorgusu
$yetkili = array(
'username' => 'username',
'auth' => 'admin');
$yetkili = $db->selectOrLimit("users", $yetkili,5);
//eğer kayıt varsa herzaman iki boyutlu bir dizi döner yoksa boş döner ve limit kadar veri getirir
print_r($yetkili);
//Limitte başlangıç değeri
$yetkili = array(
'username' => 'username',
'auth' => 'admin');
$başlangıc= 4;
$limit=7;
$yetkili = $db->selectOrLimit("users", $yetkili, $limit, $başlangıc);
//eğer kayıt varsa herzaman iki boyutlu bir dizi döner yoksa boş döner ve limit kadar veri getirir
print_r($yetkili);
/*Eğer paremetre göndermek istemiyorsak şu şekilde işlem ysparız selectOrLimit("users", null, $limit, $başlangıc)*/
//Select and Limit Sorgusu
$user= array(
'username' => 'username',
'password' => md5('password'));
$user = $db->selectAndLimit("users", $user,1);
print_r($yetkili);
//Manuel Sorgu
$sql = "SELECT (ad,soyad) FROM user ad='fatih' and soyad='göl'";
$gelen = $db->query($sql);
$gelen = $gelen->fetchAll();
print_r($gelen);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

PDO ile Veritabanı Bağlantısı ve Listeleme

Sql kodlarımız

MySQL
10 lines
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`uye_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Tablo döküm verisi `users`
--
INSERT INTO `users` (`user_id`, `username`) VALUES (1, 'admin'),(2, 'test'),(3, 'user');
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Php kodarımız

<?php 
///////////////////////BAGLANTI FONKSIYONUMUZ//////////////////////////
function pdo_mysql_baglan($HOST,$NAME,$USER,$PASS,$CHAR){
return $GLOBALS["baglan"]=array(0=>"mysql:host=$HOST;dbname=$NAME;charset=$CHAR",1=>"$USER",2=>"$PASS");
}
////////////////////////////////////////////////////////////////////////////////////

pdo_mysql_baglan("localhost","wordpress","root","123456","utf8");
$pdo = new pdo($baglan[0],$baglan[1],$baglan[2]);

$query = $pdo->query("SELECT * FROM users");
foreach( $query->fetchAll(PDO::FETCH_ASSOC) as $data){
	echo $data["username"];
	echo "<br>";
}

?>

Onaya Göre İsim Listelemek

Veritabanımızı oluşturalım

MySQL
14 lines
CREATE TABLE uretim
(
id int auto_increment primary key,
musteri varchar(255),
adet int(11),
onay int(1)
);
INSERT INTO uretim (id,musteri,adet,onay)
VALUES
(1, '1.Müşteri',5,0),
(2, '2.Müşteri',8,1),
(3, '3.Müşteri',2,2),
(4, '4.Müşteri',7,3);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

baglan.php adlı dosyamızdan veritabanı bağlantımızı oluşturmuş varsayıp, kodlarımızı ekliyoruz.

PHP
82 lines
<?php include "baglan.php";
?>
<table border="1" bordercolor="#111111" width="100%">
<tr>
<td width="25%" >
<table border="1" bordercolor="#111111" width="100%">
<tbody>
<th>Bekleyen</th>
</tbody>
<thead>
<tr>
<td>Müşteri Adı</td><td>Adet</td>
</tr>
<?php
$veri=mysql_query("select * table uretim Where onay = 1");
while($v=mysql_fetch_array($veri)){
echo '<tr><td>'.$v["musteri"].'</td><td>'.$v["adet"].'</td>';
}
?>
</tr>
</thead>
</table>
</td>
<td width="25%" >
<table border="1" bordercolor="#111111" width="100%">
<tbody>
<th>Kaplama</th>
</tbody>
<thead>
<tr>
<td>Müşteri Adı</td><td>Adet</td>
</tr>
<?php
$veri=mysql_query("select * table uretim Where onay = 2");
while($v=mysql_fetch_array($veri)){
echo '<tr><td>'.$v["musteri"].'</td><td>'.$v["adet"].'</td>';
}
?>
</tr>
</thead>
</table>
</td>
<td width="25%" >
<table border="1" bordercolor="#111111" width="100%">
<tbody>
<th>Taşlama</th>
</tbody>
<thead>
<tr>
<td>Müşteri Adı</td><td>Adet</td>
</tr>
<?php
$veri=mysql_query("select * table uretim Where onay = 3");
while($v=mysql_fetch_array($veri)){
echo '<tr><td>'.$v["musteri"].'</td><td>'.$v["adet"].'</td>';
}
?>
</tr>
</thead>
</table>
</td>
<td width="25%" >
<table border="1" bordercolor="#111111" width="100%">
<tbody>
<th>Sevkiyat</th>
</tbody>
<thead>
<tr>
<td>Müşteri Adı</td><td>Adet</td>
</tr>
<?php
$veri=mysql_query("select * table uretim Where onay = 1");
while($v=mysql_fetch_array($veri)){
echo '<tr><td>'.$v["musteri"].'</td><td>'.$v["adet"].'</td>';
}
?>
</tr>
</thead>
</table>
</td>
</tr>
</table>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Sorgu Sonucunu Excel’e Aktarmak

PHP
47 lines
<?PHP
error_reporting(4);
class ExportToExcel
{
function exportWithPage($php_page,$excel_file_name)
{
$this->setHeader($excel_file_name);
require_once "$php_page";
}
function setHeader($excel_file_name)
{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$excel_file_name");
header("Pragma: no-cache");
header("Expires: 0");
}
function exportWithQuery($qry,$excel_file_name,$conn)//to export with query
{
$tmprst=mysql_query($qry,$conn);
$header="<center><table border=1px><th>Tablo Dökümü</th>";
$num_field=mysql_num_fields($tmprst);
while($row=mysql_fetch_array($tmprst,MYSQL_BOTH))
{
$body.="<tr>";
for($i=0;$i<$num_field;$i++)
{
$body.="<td>".$row[$i]."</td>";
}
$body.="</tr>";
}
$this->setHeader($excel_file_name);
echo $header.$body."</table";
}
}
$conn=mysql_connect('localhost','root','')or die('bağlanmadı');
mysql_select_db('test');
//ÖRNEK
$exp=new ExportToExcel();
//$exp->exportWithPage("export_file.php","test.xls");
$qry="select * from qa_users";
$exp->exportWithQuery($qry,"test.xls",$conn);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Sorgu Sonrası Yönlendirme ile Güvenlik

Özellikle insert yaparken, flood engellemek için bunu kesinlikle uygulamalısınız.

Veritabanı bağlantınızı baglan.php dosyasında hazırlayın ve mysql_query sorgusunu düzenleyin.

PHP
11 lines
<?php
include("baglan.php");
$sql_kontrol =mysql_query("select or update or insert or delete vs...");
mysql_error();
if (!empty($_SERVER['HTTP_REFERER'])){//yönlendirme
header("Location: ".$_SERVER['HTTP_REFERER']);
}else{
header("Location: 404.html?err=referer");
}
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

İki Tablo Arasındaki Farkı Bulmak

Mantık gayet basit. Birbiriyle eşleşmeyen varsa dışarıda kalıyor.

Örneğin böyle bir tablomuz olduğunu düşünürsek

MySQL
7 lines
CREATE TABLE urun (`id` int);
INSERT INTO urun (`id`)
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
CREATE TABLE urundetay (`id` int, `uid` int);
INSERT INTO urundetay (`id`,`uid`)
VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 7);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Yöntem 1

MySQL
2 lines
SELECT u.id FROM urun as u
WHERE NOT EXISTS (SELECT * FROM urundetay as d WHERE d.uid = u.id )
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Yöntem 2

MySQL
3 lines
SELECT u.id FROM urun as u
LEFT OUTER JOIN urundetay as d ON u.id = d.uid
where d.uid IS NULL
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

Markdown
8 lines
+-----+
| id |
+-----+
| 6 |
| 8 |
| 9 |
| 10 |
+-----+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Çift Kayıtları Bulmak

Yapmış olduğum bir örneği paylaşmak istiyorum.

Flood engellememiş iseniz, bu şekilde çift kayıtları silme veya düzenleme imkanınız olabilir.

MySQL
8 lines
select f.* from firma as f,
( select link,count(1) as linkSayisi
from firma
group by link
having count(1)>1
) as f2
where f.link=f2.link
ORDER BY `f`.`link` ASC
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

veya

MySQL
5 lines
SELECT dil,link, COUNT(link) AS adet
FROM firma
GROUP BY link,dil
HAVING ( COUNT(link) > 1 )
ORDER BY adet desc
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX