Veritabanında Tablodaki Bir Değeri Değiştirmek [PHP MYSQL ]

Mysqlde bazı özel karakterleri silmek için yada özel karakter eklemek için yada farklı amaçlar için replace işlemine ihtiyaç duyarız. Tablodaki bütün değerleri tek tek düzenlemek yerine bunu topluca yapmanın yolu elbette var.

UPDATE TABLOADI SET SUTUNADI = REPLACE(sutunadi, 'aranandeger', 'yenideger')

İlgili kısımları kendinize göre değiştirerek çalışmanızda kullanabilirsiniz.

En Çok Kullanılan Laravel Mysql Terminal Komutları, Veritabanı işlemleri (Tinker)

Mysqle root ile bağlantı kurmak

mysql -u root

UTF8 formatında Veritabanı oluşturmak:

 CREATE DATABASE laravel_api CHARACTER SET utf8 COLLATE utf8_general_ci;

İşlem yapmak üzere İlgili veritabanını seçmek

USE DATABASEADI

Migrate dosyalarını çalıştırmak için

php artisan migrate

Yeni Migrate oluşturmak için

 php artisan make:migration create_products_table --create=products

Çalıştırılan Son Migrate işlemini geri almak için

php artisan migrate:ROLLBACK

Çalıştırılan TÜM Migrate işlemini geri almak için

php artisan migrate:reset

Hem reset Hem de migrate işlemini tek seferde yapmak için

php artisan migrate:refresh

Bütün tabloları silmek için

php artisan migrate:fresh

Migrate işleminde ilgili alanı Boş kalabilir yapmak için

$table->text('ornekalan')->NULLABLE();

Laravelde DB sınıfına ait hazır metodları kullanmak için

php artisan tinker

Tinker terminalden kayıt eklemek için

DB::INSERT('insert into tabloadi (sutun1, sutun2, sutun3) values (?, ?, ?), ['aciklama 1 ', 'aciklama 2', 'aciklama 3'] ');

Tinker terminalden kayıtları listelemek için

 DB::SELECT('select * from products');

Tablodaki verileri listelemenin diğer yolu:

DB::TABLE('urunler')->GET();

Tablodaki tek bir kaydı çekmek için

>>> DB::TABLE('urunler')->WHERE('kolonadi','icerik1')->GET()

Tablodaki verilerden tek bir şarta göre veri çekmek için
Örn: fiyatı 10 üzerinde olanları listelemek:

DB::TABLE('urunler')->WHERE('fiyat','>', 10)->GET()

Tablodaki verilerden tek bir şarta göre tek veri çekmek için
Örn: fiyatı 10 üzerinde olanlardan ilkini almak için

DB::TABLE('urunler')->WHERE('fiyat','>', 10)->FIRST()

Doğrudan ID’ye ait değere göre veri çekmek için:

DB::TABLE('urunler')->find(1);

Dizi halinde veri eklemek:

DB::TABLE('urunler')->INSERT(['name'=>'Product 10', 'slug'=> 'product-10', 'price'=>100])

Tablodaki kayıt sayısını bulmak

 DB::TABLE('urunler')->COUNT()

Her tabloya karşılık gelecek model oluşturmak:

php artisan make:model modelAdi

modelAdi İsimli Modeldeki Verileri Listelemek

 \App\Models\modelAdi::GET()

Laravel 8’de tinker kullanarak nesne oluşturmak:

$product = NEW \App\Models\Product;

Laravel 8 Tinker nesne içindeki verilerin veritabanına kaydedilmesi

 $product->save()

Tablodaki bütün kolonlara veri ekleme yapılabilmesine olacak sağlayan kod model içinde kullanımı

protected $guarded = [];

Tabloda seçili bir alanı güncellemek;

 App\Models\Urun::find(2)->UPDATE(['price' =>45.50]);

factory ile fake veriler oluşturmak

User::factory()->make();

Kullanım örneği:

use App\Models\User;

public function test_models_can_be_instantiated()
{
    $user = User::factory()->make();

    // Use model in tests...
}

Çoklu kullanım örneğin 3 adet kullanıcı oluşturmak için


User::factory()->count(3)->make();

Veritabanına eklemek için


User::factory()->count(3)->create();

Tabloyu boşlatmak için

DB::table('users')->truncate();

Factory Template Dosyası oluşturmak için

php artisan make:factory OrnekFactory

OrnekFactory içindeki ayarlamaları yaptıktan sonra tinker çalıştırmadan önce

composer dump-autoload

komutunu çalıştırmakta fadya var aksi halde hata alabilirsiniz.

seeders çalıştırmak

seed yapısı için run fonksiyonu içine
– 10 kullanıcı oluşturmak için
– bunu yapabilmek için daha önce UserFactory.php dosyasının olması ve gerekli düzenlemenin yapılmış olması gerekiyor.

 User::factory()->count(10)->create();

Terminalden bu komutu çalıştırmak için

php artisan db:seed

DatabaseSeeder.php içinden işlemler;

– Tabloyu boşaltmak için

DB::statement("Truncate table users");

Özel Seeder Yapısı oluşturmak:

 php artisan make:seeder OrnekTableSeeder

Harici seeder dosyalarını çağırmak:

Yukarıdaki gibi oluşturulan OrnekTableSeeder dosyasını DatabaseTableSeeder.php içine aşağıdaki gibi çağırarak kullanabiliriz:

 $this->call(OrnekTableSeeder::class);

Tabloların içini tamamen silmek:

php artisan migrate:fresh

Tüm tabloları silmek ve ardından seed işlemiyle otomatik doldurmak için

php artisan migrate:fresh --seed

Controller’dan uyeler.blade.php’ye veri göndermek için

$uyeler = Uyeler::find(3);
return view('uyeler', array('uyeler'=>$uyeler));

Şarta göre veri listelemek

$uyeler = Uyeler::where('id',4)->first();
return view('uyeler', array('uyeler'=>$uyeler));

WhereRaw fonksiyonu ile şarta göre veri listelemek

$uyeler = Uyeler::whereRaw('id=?', array(1))->first();
return view('uyeler', array('uyeler'=>$uyeler));

Birden fazla satır veri listelemek

$uyeler = Uyeler::all();

satır sayısını bulmak

$uyeSayisi = Uyeler::where('id', '>', 0)->count();

Yukarıda değişkene aktarılanları uyeler blade sayfasına postalamak için

return view('uyeler', array('uyeler'=>$uyeler, 'uyeSayisi' =>$uyeSayisi));

Route yapısı içinde factory kullanımı

Route::get('/users', function (){

    return User::factory()->count(10)->make();

});

Controller oluştururken Otomatik model ve metodları oluşturmak

php artisan make:controller ProductController --resource --model=Product

Route Tanımlarını Listelemek

 php artisan route:list

Api Klasörü içinde model tanımlı oluşturmak

php artisan make:controller Api\ProductController --api --model=
product

apiResources Toplu Tanımlama Örneği:

Route::apiResources([
    'products' => 'App\Http\Controllers\Api\ProductController',
    'users' => 'App\Http\Controllers\Api\UserController'

]);

Product isimli modeldeki dataların hepsini listelemek

  return Product::all();
 

Product isimli modeldeki dataların hepsini listelemek 2. yol

  return response()->json(Product::all(), 200);
 

ID’ye dayalı veri kontrolü yapmak (girilen id değerine karşılık veritabanında veri yoksa hata mesajı vermek)

    public function show($id)
    {
        $product = Product::find($id);
 
        if ($product)
            return response($product, 200);
        else
            return response(['message' => 'Product not found'], 404);
 
       // return $product;
 
    }

Laravel 8 PUT / update işlemi için aşağıdaki yöntemler kullanılabilir

    public function update(Request $request, product $product)
    {
        //

          $input = $request->all();
          $product->update($input);

        return response([
            'data' => $product,
            'message' => 'Product updated.'
             ], 200);

    }

yada

    public function update(Request $request, product $product)
    {
        //


        $product->name = $request->name;
        $product->slug = Str::slug($request->name);
        $product->price = $request->price;
        $product->save();

        return response([
            'data' => $product,
            'message' => 'Product updated.'
             ], 200);

    }

Laravel 8 DELETE / silme işlemi için aşağıdaki yöntemi kullanabilirsiniz.

public function destroy(product $product)
{
//

$product->delete();

return response([

‘message’ => ‘Product deleted’
], 200);

}

Laravel 8 Paginate sayfalama kullanımı

– her sayfada 5 adet gösterim için

  return response(Product::paginate(5),200);

Laravel 8 Paginate Offset ve limit kullanımı:
– varsayılan değerleri girerek sayfalama

        $offset = $request->offset ? $request->offset: 0;
        $limit = $request->limit ? $request->limit: 10;

        return response(Product::offset($offset)->limit($limit)->get(),200);

Get kullanımı örnek:
– 11’den itibaren 5 kayıt ekrana gelecektir

http://127.0.0.1:8000/api/products?offset=10&limit=5

MYSQL Index Oluşturma ve Index Silme Kodu

MYSQL Veritabanında boyutu yüksek olan tablolarda arama yapmayı hızlandırmak için INDEX oluşturmak gerekir.

İndex oluşturmak için:

Mükerrer kayıtlara izin veren index yapısı oluşturmak için

CREATE INDEX <index_ismi> ON <tablo_adi> (kolon_adi)

Tekrarlı kayıtlara izin vermeyen yapı

CREATE UNIQUE INDEX <index_ismi> ON <tablo_adi> (kolon_adi)

Index’leri silmek / kaldırmak için kullanılan yapı

ALTER TABLE <tablo_adi> DROP INDEX <index_adi>

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given HATA ÇÖZÜMÜ

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\xxx\xxx.php on line 10

Böyle bir hata alıyorsanız muhtemelen sql sorgunuzda yer alan bir parametre tablonuzda yok demektir. Lütfen tablo adı, sütun adı gibi bilgileri gözden geçirmeyi deneyin.

MYSQL ŞARTLI VE ŞARTSIZ UPDATE KOMUTLARI

SQL’DE Eğer şu değer varsa güncelle, yada şu değere eşitse güncelle yada şu değerleri şununla güncelle şeklinde komut vermek istediğimiz durumlar olabilir, bu yazımızda bunlara değineceğiz;

1) GÜNCELLEYECEĞİMİZ ALANI BULALIM;

 SELECT * FROM TABLOADI WHERE ADSOYAD LIKE "%kodsitesi%"

Veritabanında güncelleme yada silme işlemi yapmadan önce önizleme yapmak çok önemli. Bu yüzden daima geri dönüşü imkansız işlemler yapmadan önce bu şekilde önizlemek gerekir; biz de burada Adsoyad sütununda kodsitesi geçen bütün kayıtları listeledik.

2) İÇİNDE kodsitesi GEÇEN DEĞERİ kodgunlugum.com olarak değiştirmek istiyorsak;

UPDATE TABLOADI SET ADSOYAD='kodgunlugum.com' WHERE ADSOYAD like '%kodsitesi%'

% işaretleri metnin tamamında arama yapar.

3) ŞARTSIZ KOŞULSUZ GÜNCELLEME YAPMAK İÇİN;

UPDATE TABLOADI SET ADSOYAD='kodgunlugum.com'

Bazen bu komutlar hayat kurtarabiliyor, faydalı olması dileği ile iyi çalışmalar…

Godaddy Uzak Mysql Sorunu Çözümü

Bir siteden farklı sitedeki mysql veritabanına bağlantı kurmayı çok araştırdım Godaddy Firmasında barınan bir hosting’ten farklı bir firmada yer alan sunucuya mysql bağlantısı kurmak hiç bu kadar zor olmamıştı, çünkü hem Godaddy yetkilileriyle hem diğer firmalarla 1 haftadan fazla süren görüşmelerim bir sonuç vermedi, karşı firmanın (mysqline baglanmak istediğim firma hostingi) cpanel’inden uzak mysql yetki menüsünden Godaddy cpanel Shared IP Address kısmında yazan ip adresine yetki vermeme rağmen sonuç değişmiyor bir türlü bağlantı kuramıyordum sorunu kendi deneme yanılma yöntemlerimle çözdüm. Eminim çoğu kişi de bu sorunu yaşıyordur yada yaşayacaktır bu yüzden hemen sorunun çözümüne değinmek istiyorum.

*Öncelikle her şeyin doğru olduğunu belirterek aldığım hatayı paylaşayım:

Warning
: mysqli::__construct(): (28000/1045): Access denied for user 'mysql_username'@'n3plcpnl0065.prod.ams3.secureserver.net' (using password: YES) in
/home/ssfkkskkl558/public_html/example.php
on line
8
Connection failed: Access denied for user 'mysql_username'@'n3plcpnl0065.prod.ams3.secureserver.net' (using password: YES)

Şnuları yaptığımızdan eminiz:
1) Karşı sunucu mysql veritabanı adı doğru
2) Karşı sunucu mysql veritabanı kullanıcı adı doğru
3) Karşı sunucu mysql veritabanı kullanıcı şifresi doğru
4) Karşı sunucu cpanelden uzak mysql olarak Godaddy Shared IP Address eklendi.

İşte tam da burada 4. adıma dikkat etmek gerekiyor hata mesajında geçen n3plcpnl0065.prod.ams3.secureserver.net adresinin ip adresine bir bakıyoruz ki 160.153.153.150 yani bu ip adresi Godaddy cpanel Shared IP adresinden tamamen farklı, şimdi karşı firma cpanel uzak mysql alanından burada görünen ip adresine yetki vermeyi deniyoruz ve sorun çözülüyor. 🙂

Hepsi bu kadar iyi çalışmalar.

Eğer sorun devam ediyorsa burada yer alan adımları yaptığınızdan emin olun.

PHP Uzak Mysql Bağlantısı Sorunları ve Çözümü

Bir siteniz var diyelim A sitesi olsun. B sitesinde yer alan bir veritabanına bağlanmak, birtakım verileri A sitenizde göstermek istiyorsunuz diyelim. Bunun için yapılacaklar;

1) B sitenize gidip cpanelden yada ilgili yönetim panelinden uzak mysql (remote mysql) alanından A sitesinin IP adresini ekleyerek izin vermeniz gerekli.
2) A sitenizin 3306 portunu aktif hale getirmek. (Hosting firmanızla görüşerek halledebilirsiniz.)

2. Adım uygulanmadığında aşağıdakine benzer bir hata almak kaçınılmaz olacaktır.
(*Eğer A sitesinin ip adresine B sitesinde uzak mysql yetkisi verdiyseniz fakat A sitesinin 3306 portu kapalıysa bu hatayı alabilirsiniz.)

Warning
: mysqli::__construct(): (HY000/2003): Can't connect to MySQL server on 'xx.xx.xx.xx' (110) in
/home/usernamehost/public_html/example.php
on line
21

Connection failed: Can't connect to MySQL server on 'xx.xx.xx.xx' (110)

* Firmalardan bir tanesi Godaddy ise, Godaddy Uzak Mysql Sorunu Çözümü için buradaki yazıyı mutlaka okuyunuz.

MYSQL Tarih, Saat Sütunlarını Tek Sütunda datetime olarak birleştirmek

tarih sütunu format: date;
saat sütunu format: time;
olduğunu varsayalım. Birleştirip görüntülemek için :

SELECT CONCAT(tarih, " ",saat) as tarih_saat FROM tablo_adi

Görüntülemekten ziyade 3. sütuna (tarih_saat) kaydetmek için:

tarih ve saat sütununu tek sütuna kaydetmek için tarih_saat adında 3. bir sutun açıyoruz (formatını datetime yapabilirsiniz) ardından;

UPDATE tablo_adi SET tarih_saat = CONCAT(tarih, ' ', saat);

çalıştırmak yeterli olacaktır.

örnek çıktı:

+----------------+----------------+----------+------------+
|    tarih       |      saat      |tarih_saat             |
+----------------+----------------+-----------------------+
|   2020-01-02   |     12:02:03   |  2020-01-02 12:02:03  |
+----------------+----------------+----------+------------+

MYSQL index neden yapılır? INDEX ne işe yarar?

index olayı sıkça kullanılan Mysql, Microsoft SQL, Oracle gibi veritabanları için aynıdır. Eğer satır sayısı çok olan boyutları yüksek olan veritabanlarında özellikle veri arama (where, like kullanımı) işlemleri yapıyorsak INDEX kullanımı çok önemlidir.

İNDEX NEDİR?
index, Veritabanı içinde yer alan tablolarda bulunan sütunların içindeki verilerin belli bir düzene göre sıralanmasıdır diyebiliriz.

Örneğin:

SELECT * FROM tablo_adi WHERE sutun_adi="Kod Günlüğüm"

Bu sorgudaki tablomuzda 1.000.000 kayıt olduğunu varsayalım. Eğer Kod Günlüğüm isimli veri 999.000 inci satırda yer alıyorsa veritabanımız bu veriye ulaşana kadar satır satır sorgu yapacaktır. 999.000 inci satırda bu veriyi bulduğunda ise kaydımızı ekrana getirecektir.

Eğer burada index yapısını kullanırsak Okumaya devam et MYSQL index neden yapılır? INDEX ne işe yarar?