lostyazilim
tr.link

Bu sorguyu biraz basitleştirebilirmisiniz ?

4 Mesajlar 1.022 Okunma
lstbozum
tr.link

Yusufcoruh Yusufcoruh WM Aracı Kullanıcı
  • Üyelik 30.08.2016
  • Yaş/Cinsiyet 48 / E
  • Meslek Muhasebe
  • Konum İstanbul Anadolu
  • Ad Soyad Y** C**
  • Mesajlar 136
  • Beğeniler 17 / 16
  • Ticaret 0, (%0)
Otp authentication yöntemi ile kullanıcı kaydetmeyi amaçlayan bir scriptte şöyle bir sorgu yapılmış , ve anlamaya çalışıyorum ancak biraz yardıma ihtiyacım var

$user_activation_code = md5(rand());
$user_otp = rand(100000, 999999);

$data = array(
':user_name' => $user_name,
':user_email' => $user_email,
':user_password' => $user_password,
':user_activation_code' => $user_activation_code,
':user_email_status'=> 'not verified',
':user_otp' => $user_otp
);

$query = "
INSERT INTO register_user
(user_name, user_email, user_password, user_activation_code, user_email_status, user_otp)
SELECT * FROM (SELECT :user_name, :user_email, :user_password, :user_activation_code, :user_email_status, :user_otp) AS tmp
WHERE NOT EXISTS (
SELECT user_email FROM register_user WHERE user_email = :user_email
) LIMIT 1
";

$statement = $connect->prepare($query);

$statement->execute($data);


aslında bir çok yeri gayet açık ancak sorgu kafamı karıştırıyor böyle bir yapı ile ilk defa karşılaşıyorum

şu aşşağıdaki kısımda ne yapılmak isteniyor yada daha basit bi veya anlaşılabilir yazım şekli mevcutmudur ?

$query = "
INSERT INTO register_user
(user_name, user_email, user_password, user_activation_code, user_email_status, user_otp)
SELECT * FROM (SELECT :user_name, :user_email, :user_password, :user_activation_code, :user_email_status, :user_otp) AS tmp
WHERE NOT EXISTS (
SELECT user_email FROM register_user WHERE user_email = :user_email
) LIMIT 1
";
 

 

wmaraci
reklam

BarisYILMAZ BarisYILMAZ WM Seo Tool Kullanıcı
  • Üyelik 09.04.2015
  • Yaş/Cinsiyet 41 / E
  • Meslek Bilgisayar Teknik Servis
  • Konum İstanbul Avrupa
  • Ad Soyad B** Y**
  • Mesajlar 394
  • Beğeniler 207 / 132
  • Ticaret 5, (%100)
Veritabanını yedek alıp deneyin denemekten korkmayın :)
o kod $data dizininden gelen veriyi register_user içine ekliyor.
$data da ekli olan dizi elemanlarından istemediklerinizi sağındaki değişkenlerle beraber silin ve daha sonra
$query içindende aynı elemanları silin.
Ama hepsi lazımsa orasını bilemem :)
 

 

Yusufcoruh Yusufcoruh WM Aracı Kullanıcı
  • Üyelik 30.08.2016
  • Yaş/Cinsiyet 48 / E
  • Meslek Muhasebe
  • Konum İstanbul Anadolu
  • Ad Soyad Y** C**
  • Mesajlar 136
  • Beğeniler 17 / 16
  • Ticaret 0, (%0)
Yanıt için Çok teşekkür ederim .
$data değişkeni ile $statement->execute($data); arasındaki ilişkiyi biliyorum. sorularımı biraz daha açıklayayım
$query şeklinde tek sorgum var ve içinde
INSERT INTO register_user (tüm alanlar)konmuş ve " ; " yada " , " sonlandırımadan
alt satırda
SELECT * FROM (SELECT :tüm anahtarlar ) diyerek insertten sonra selecte geçilmiş ve bu satırın sonunda " AS tmp" şeklind ebi ifade var nedir ne iş yapar neden orda ?
ve son olarak WHERE NOT EXISTS kısmı varki bunuda pek anladığım söylenemez

kısaca konu array içindeki değerlerin execute edilmesi değil o kısım basit
 

 

tiwaly tiwaly NodeJS / PHP / NoSQL Kullanıcı
  • Üyelik 10.10.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılımcı
  • Konum İzmir
  • Ad Soyad i** A**
  • Mesajlar 363
  • Beğeniler 135 / 104
  • Ticaret 7, (%100)
yeni user yaratırken önce aynı mailde bir user var mı diye kontrol etmiş sadece.
 

 

wmaraci
wmaraci
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al