lostyazilim
tr.link

PDO global, prepare ve query hatası

20 Mesajlar 3.195 Okunma
lstbozum
tr.link

emlak48 emlak48 WM Aracı Kullanıcı
  • Üyelik 28.03.2016
  • Yaş/Cinsiyet 42 / E
  • Meslek Emlak
  • Konum Antalya
  • Ad Soyad İ** Y**
  • Mesajlar 112
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)
Hocam dediğin şekilde yaptım olmadı, herhalde bir yerde hata yaptım, kod üzerinde düzenleme yapma şansın varmı
 

 

wmaraci
reklam

capscroll capscroll WM Aracı Kullanıcı
  • Üyelik 02.08.2019
  • Yaş/Cinsiyet 23 / E
  • Meslek Öğrenci
  • Konum Kahramanmaraş
  • Ad Soyad A** K**
  • Mesajlar 164
  • Beğeniler 41 / 54
  • Ticaret 0, (%0)
Elbette, isterseniz ilgili PHP dosyasını bana iletin hazırlayıp test ettikten sonra size göndereyim.
 

 

omrumdely omrumdely Web Tasarım Kullanıcı
  • Üyelik 26.05.2012
  • Yaş/Cinsiyet 34 / E
  • Meslek Web Tasarım
  • Konum Kocaeli
  • Ad Soyad Ö** G**
  • Mesajlar 1469
  • Beğeniler 157 / 158
  • Ticaret 11, (%100)

capscroll adlı üyeden alıntı


//Sorguyu değişkenlerden çekmek yerine el ile yazın.
$ilancek = $db->prepare('SELECT * FROM user LIMIT :limit,:sayfa');
$ilancek->bindValue(':limit', $limit, PDO::PARAM_INT);
$ilancek->bindValue(':sayfa', $sayfada, PDO::PARAM_INT);
$ilancek->execute();
while($ilan=$ilancek->fetchAll(PDO::FETCH_ASSOC)){


merhaba hocam listelemde en güvenli sorgu bu şekildemi , rica etsem ekleme ,silme ve güncelleme işlemleri ile ilgili yazabilir misiniz?
 

 

:)

capscroll capscroll WM Aracı Kullanıcı
  • Üyelik 02.08.2019
  • Yaş/Cinsiyet 23 / E
  • Meslek Öğrenci
  • Konum Kahramanmaraş
  • Ad Soyad A** K**
  • Mesajlar 164
  • Beğeniler 41 / 54
  • Ticaret 0, (%0)
@omrumdely Çeşitli yöntemler var fakat benim en güvenli bulduğum yöntem budur çünkü gelen değerin hangi türde olduğunu (BOOL, INT, STR) belirleyip buna göre post edebiliyoruz.

Silme, seçme, güncelleme ve ekleme vb. yöntemlerde de aynı şekilde kullanım sağlayabilirsiniz, eğer dışarıdan bir veri gelmiyorsa query() fonksiyonunu kullanabilirsiniz sonuçta veriyi sunucu içerisinde oluşturup sunucu içerisinde işleyeceğiniz için riskli veri taşıma olasılığı daha düşük olacak.


$isim = trim(htmlentities($_POST['isim'])); //Post verisi içerisindeki HTML kodlarını trimledik.
$soyisim = trim(htmlentities($_POST['soyisim'])); //Aynı işlem

//Sütunları ve vereceğimiz değerleri parantez içerisinde belirttik.
//Dışarıdan gelecek değerlerin başlarına ':' koyarak hazırladık, execute öncesinde array ile bunlara değer atayacağız.
$post = $db->prepare('UPDATE user set (isim, soyisim) VALUES (:isim, :soyisim)');

$post->bindValue(':isim', $isim, PDO::PARAM_STR, 255); //String veri tipi olduğunu belirttik ve tek seferde maksimum 255 karakter kabul ediyoruz, sonuçta bu bir isim.

$post->bindValue(':soyisim', $soyisim, PDO::PARAM_STR, 255); //Aynı işlem

$post->execute(); //Execute ettik (Gönderdik)

Insert ve Update sorgularını bu şekilde kullanabilirsiniz.

Birde Delete sorgusu çalıştıralım.

$id = trim(htmlentities($_POST['soyisim']));

$post = $db->prepare('DELETE FROM user WHERE id=:id');

$post->bindValue(':id', $id, PDO::PARAM_INT); //Burada integer(INT) türünde veri işleyeceğiz.

$post->execute();


İsterseniz execute fonksiyonu içerisinde de array işlemi yapabilirsiniz.

$sorgu= $db->prepare('DELETE FROM user WHERE id=:id');
$sonuc = $sorgu->execute(array(
':id' => $id
));
 

 

wmaraci
wmaraci

melih34 melih34 WM Aracı Kullanıcı
  • Üyelik 01.11.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Bilgisayar Donanım Teknisyeni..
  • Konum Isparta
  • Ad Soyad M** Ş**
  • Mesajlar 26
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)

Konuyu Hortlatmış oluyorum  Sanırım Ama  benimde  şöyle bir sorum olacak 
query  yerine prepare kullanmak istiyorum fonksiyon kodumdan query kaldırım prepare yapınca verileri okumuyor 
bunu yapma sebebim php 5.6 dan php 7.1 geçince sitede bazı hatalar çıkıyor 

function dbquery( $sorgu ) {
	global $db;
	$query = $db->query($sorgu)->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}
 

 

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)

melih34 adlı üyeden alıntı

Konuyu Hortlatmış oluyorum  Sanırım Ama  benimde  şöyle bir sorum olacak 
query  yerine prepare kullanmak istiyorum fonksiyon kodumdan query kaldırım prepare yapınca verileri okumuyor 
bunu yapma sebebim php 5.6 dan php 7.1 geçince sitede bazı hatalar çıkıyor 

function dbquery( $sorgu ) {
	global $db;
	$query = $db->query($sorgu)->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}

 query yerine prepare kullanacaksanız fonksiyonu da değiştirmeniz gerekiyor. Çünkü prepare ile güvenli işlem için direk sorgu kodu almanız uygun değil. Şu şekilde güncelleyebilirsiniz.

function dbquery( $sorgu, $execute ) {
	global $db;
	$query = $db->prepare($sorgu)->execute(array($execute))->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}

 

melih34

kişi bu mesajı beğendi.

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

melih34 melih34 WM Aracı Kullanıcı
  • Üyelik 01.11.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Bilgisayar Donanım Teknisyeni..
  • Konum Isparta
  • Ad Soyad M** Ş**
  • Mesajlar 26
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)

ÖmerGünay adlı üyeden alıntı

 query yerine prepare kullanacaksanız fonksiyonu da değiştirmeniz gerekiyor. Çünkü prepare ile güvenli işlem için direk sorgu kodu almanız uygun değil. Şu şekilde güncelleyebilirsiniz.

function dbquery( $sorgu, $execute ) {
	global $db;
	$query = $db->prepare($sorgu)->execute(array($execute))->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}

 

 teşekkürler 

 

 

melih34 melih34 WM Aracı Kullanıcı
  • Üyelik 01.11.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Bilgisayar Donanım Teknisyeni..
  • Konum Isparta
  • Ad Soyad M** Ş**
  • Mesajlar 26
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)

dediğini denedim ama hata aldım 

Fatal error: Uncaught ArgumentCountError: Too few arguments to function dbquery(), 1 passed in C:\Ampps\www\admin\settings.php on line 57 and exactly 2 expected in C:\Ampps\www\eticaret\teknomarketin\admin\functions.php on line 293 ( ! ) ArgumentCountError: Too few arguments to function dbquery(), 1 passed in C:\Ampps\www\admin\settings.php on line 57 and exactly 2 expected in C:\Ampps\www\admin\functions.php on line 293

settings.php 57 satır

$settings = dbquery("SELECT * FROM settings");

functions.php 293 Satır

293 function dbquery( $sorgu, $execute ) {
294	global $db;
295	$query = $db->prepare($sorgu)->execute(array($execute))->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}
 

 

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)

melih34 adlı üyeden alıntı

dediğini denedim ama hata aldım 

Fatal error: Uncaught ArgumentCountError: Too few arguments to function dbquery(), 1 passed in C:\Ampps\www\admin\settings.php on line 57 and exactly 2 expected in C:\Ampps\www\eticaret\teknomarketin\admin\functions.php on line 293 ( ! ) ArgumentCountError: Too few arguments to function dbquery(), 1 passed in C:\Ampps\www\admin\settings.php on line 57 and exactly 2 expected in C:\Ampps\www\admin\functions.php on line 293

settings.php 57 satır

$settings = dbquery("SELECT * FROM settings");

functions.php 293 Satır

293 function dbquery( $sorgu, $execute ) {
294	global $db;
295	$query = $db->prepare($sorgu)->execute(array($execute))->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}

 execute göndermediğiniz için fonksiyonda bir değer eksik hatası vermiş. Fonksiyonu şekilde güncelleyip bi dener misin?

function dbquery( $sorgu, $execute="" ) {
	global $db;
	$query = $db->prepare($sorgu);

	if($execute=="") {
		$query->execute($execute);
	}else { 
		$query->execute(array($execute));
	}
	$query->fetch(PDO::FETCH_ASSOC);
	$result = array();
	if ( is_array($query) ) {
		$result = $query;
	}
	return $result;
}
 

 

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

melih34 melih34 WM Aracı Kullanıcı
  • Üyelik 01.11.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Bilgisayar Donanım Teknisyeni..
  • Konum Isparta
  • Ad Soyad M** Ş**
  • Mesajlar 26
  • Beğeniler 3 / 2
  • Ticaret 0, (%0)

bu seferde 298. satır hatası verdi  $query->execute($execute);

 

 

 

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