PDA

Orijinalini görmek için tıklayınız : Gönderilen SQL sorgularını görme


crazykurba
31-10-2017, 14:40:26
Yüzlerce php dosyası içinde 1 adet sql sorgusu var ve bu sql sorgusu benim istemediğim bir değişiklik yapıyor.
Bu SQL sorgusu hangisi, bunu bulmam gerekmektedir. PhpMyAdmin tarafında databaseye gönderilen tüm sql sorgularını sıralı liste halinde görebileceğim bir sistem varmı?
siz bu gibi durumlarda sorguyu nasıl buluyorsunuz?

tyesil
31-10-2017, 15:01:46
Benim izlediğim genel yöntem şudur.
Hangi tabloma istemediğim bir değişim geliyorsa tablo adını tüm dosyalarımda aratıp sql içinde geçen yerlerini buluyorum.
İlgili dosyayı bulduğumda sorun eğer ki sql den kaynaklanmıyorsa bu sefer bulduğum dosyanın adını dizinde aratıp nerelerde tetiklendiğini kontrol ediyorum.

M_D_5
31-10-2017, 15:03:46
Yüzlerce php dosyası içinde 1 adet sql sorgusu var ve bu sql sorgusu benim istemediğim bir değişiklik yapıyor.
Bu SQL sorgusu hangisi, bunu bulmam gerekmektedir. PhpMyAdmin tarafında databaseye gönderilen tüm sql sorgularını sıralı liste halinde görebileceğim bir sistem varmı?
siz bu gibi durumlarda sorguyu nasıl buluyorsunuz?

Yüzlerce dosya olması önemli değil. Önemli olan hangi sayfayı çalıştırdığınız. ve o sayfa içerisinde hangi sayfalar çağrılıyor bu önemli. Mesela hangi sayfaya girdiğinizde oluyor bu

ResimBox
31-10-2017, 15:07:13
MSSQL'deki Profiler hizmeti gibi bir şey varmı diye konuyu ben de takip ediyorum.

Arbalot
31-10-2017, 15:12:46
eğer sql sorgularını bir fonksiyon ile yapıyorsan o fonksiyonun içerisine sorgudan hemen önce sql komutlarını sessiona kaydettirip kontrol edebilirsin.
bence en sağlıklısıda sql sorgularını fonksiyon içerisinden çalıştırman.
Örnek vermek gerekirse;

$q = "select ad,soyad from kisiler";
$con->query($q);


yerine



$q = "select ad,soyad from kisiler";
$sonuc = sorgucalistir($q);

function sorgucalistir($inc){

$_SESSION['sorgular'][] = $inc;
$res = $con->query($inc);

return $res;

}



şeklinde bir yapı kullanman.

bayGaReZ
31-10-2017, 15:21:51
Anlık olarak görmek isterseniz,
SELECT `ID`, `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, LEFT(`INFO`, 51200) AS `Info` FROM `information_schema`.`PROCESSLIST`;
Tüm sorguları kayıt altına almak isterseniz: https://stackoverflow.com/questions/303994/log-all-queries-in-mysql/14403905#14403905

crazykurba
31-10-2017, 16:46:20
Benim izlediğim genel yöntem şudur.
Hangi tabloma istemediğim bir değişim geliyorsa tablo adını tüm dosyalarımda aratıp sql içinde geçen yerlerini buluyorum.
İlgili dosyayı bulduğumda sorun eğer ki sql den kaynaklanmıyorsa bu sefer bulduğum dosyanın adını dizinde aratıp nerelerde tetiklendiğini kontrol ediyorum.

Yüzlerce dosya olması önemli değil. Önemli olan hangi sayfayı çalıştırdığınız. ve o sayfa içerisinde hangi sayfalar çağrılıyor bu önemli. Mesela hangi sayfaya girdiğinizde oluyor bu

eğer sql sorgularını bir fonksiyon ile yapıyorsan o fonksiyonun içerisine sorgudan hemen önce sql komutlarını sessiona kaydettirip kontrol edebilirsin.
bence en sağlıklısıda sql sorgularını fonksiyon içerisinden çalıştırman.
Örnek vermek gerekirse;
$q = "select ad,soyad from kisiler"; $con->query($q);
yerine

$q = "select ad,soyad from kisiler"; $sonuc = sorgucalistir($q); function sorgucalistir($inc){ $_SESSION['sorgular'][] = $inc; $res = $con->query($inc); return $res; }
şeklinde bir yapı kullanman.

Anlık olarak görmek isterseniz,
SELECT `ID`, `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, LEFT(`INFO`, 51200) AS `Info` FROM `information_schema`.`PROCESSLIST`;Tüm sorguları kayıt altına almak isterseniz: https://stackoverflow.com/questions/303994/log-all-queries-in-mysql/14403905#14403905


Öncelikle cevaplar için herkese teşekkür ederim, ama mesele şu bir başkasının yazmış olduğu bir sistemi düzeltmek için uğraşıyorum,
sistem üzerinde çalışan 700den fazla cron dosyası var, sorunu buldum stoklar bir anda sıfırlanıyor ve geri geliyor ama hangi dosya hangi sql sorgusu bunu sıfırlayıp yeniden stokları yazıyor bunu bulmak için uğraşıyorum.

bayGaReZ
01-11-2017, 09:40:31
Verdiğim komutları sunucu üzerinde mysql root user ile çalıştırırsanız zaten kodun kim tarafından geldiğini görebilirsiniz. Sistemi kimin yazdığı önemli değil, mysql sunucusuna erişiminiz önemli.
Öncelikle cevaplar için herkese teşekkür ederim, ama mesele şu bir başkasının yazmış olduğu bir sistemi düzeltmek için uğraşıyorum,
sistem üzerinde çalışan 700den fazla cron dosyası var, sorunu buldum stoklar bir anda sıfırlanıyor ve geri geliyor ama hangi dosya hangi sql sorgusu bunu sıfırlayıp yeniden stokları yazıyor bunu bulmak için uğraşıyorum.

ResimBox
01-11-2017, 11:44:10
Phpmyadmin'de tabloları oluşturdum. (Verdiğiniz link için teşekkürler.)
Yalnız set komutları için yetkim yok görünüyor. Hosting hizmeti aldığım firmaya mı söylemek gerekiyor ?
SET global general_log = 1;
SET global log_output = 'table';
Bu komutları çalıştırmak istediğimde aşağıdaki sonuç dönüyor.
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Anlık olarak görmek isterseniz,
SELECT `ID`, `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, LEFT(`INFO`, 51200) AS `Info` FROM `information_schema`.`PROCESSLIST`;Tüm sorguları kayıt altına almak isterseniz: https://stackoverflow.com/questions/303994/log-all-queries-in-mysql/14403905#14403905

bayGaReZ
01-11-2017, 14:54:21
Root yetkiniz yoksa bu işlemleri yapamazsınız. Hosting hizmeti aldığınız firma ile iletişime geçin, tabloya gelen sorguları kaydetmek istiyorum deyin, onlar yardımcı olabilir.

crazykurba
02-11-2017, 12:53:24
Verdiğim komutları sunucu üzerinde mysql root user ile çalıştırırsanız zaten kodun kim tarafından geldiğini görebilirsiniz. Sistemi kimin yazdığı önemli değil, mysql sunucusuna erişiminiz önemli.

Phpmyadmin'de tabloları oluşturdum. (Verdiğiniz link için teşekkürler.)
Yalnız set komutları için yetkim yok görünüyor. Hosting hizmeti aldığım firmaya mı söylemek gerekiyor ?
SET global general_log = 1;
SET global log_output = 'table';
Bu komutları çalıştırmak istediğimde aşağıdaki sonuç dönüyor.
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation

bende komutlar nereye yazılacak anlayamadım

ResimBox
02-11-2017, 12:55:44
bende komutlar nereye yazılacak anlayamadım
PhpmyAdmin'deki SQL alanına, sql komutlarını yazıp "git/run" butonuna basıp çalıştıracaksınız. Ama sanırım mysql root olmanız gerekiyor. Hostinginiz var ise benim gibi yapamayabilirsiniz. VDS/Dedicated ise yapabilirsiniz gibi.

crazykurba
02-11-2017, 13:46:48
dediğinizi yaptım 10sn içinse 200binden fazla sorgu kayıt etti
peki bunu tek bir tablo için update komutları için yapabilir miyiz?