• 04-07-2014, 12:53:10
    #1
    Arkadaşlar kayıt işlemini gerçekleştirirken PDO: SQLSTATE[HY093]: Invalid parameter number: Hatası ile karşılaşıyorum bilgisi olan varmıdır acaba ?

    $query			=	$sql->prepare("INSERT INTO uye_isyeri(uid,uye_adi,uye_soyadi,tc,cinsiyet,dogum_tarihi,dogum_yeri,ilk_kayit_ip,ilk_kayit_tarihi,ilk_kayit_saati,son_islem_tarihi,son_islem_saati,takma_banka_hesabi,banka_adi,hesap_numarasi,hesap_sahibi,doviz_cinsi,hesap_durumu,status)VALUES(:uid,:uye_adi,:uye_soyadi,:tc,:cinsiyet,:dogum_tarihi,:dogum_yeri:,'".$_SERVER['REMOTE_ADDR']."','".date('Y-m-d')."','".date('H-i-s')."','".date('Y-m-d')."','".date('H-i-s')."',:takma_banka_hesabi,:banka_adi,:hesap_numarasi,:hesap_sahibi,:doviz_cinsi,2,1)");
    $query->execute(array(':uid' => $uid, ':uye_adi' => $uyeadi, ':tc' => $tc, ':cinsiyet' => $cinsiyet, ':dogum_tarihi' => $dogumtarihi, ':dogum_yeri' => $dogumyeri, ':takma_banka_hesabi' =>$takmabanka, ':banka_adi' => $bankaadi, ':hesap_numarasi' => $hesapno, ':hesap_sahibi' => $hesapsahibi));
  • 04-07-2014, 14:13:55
    #2
    $ekle = $sql->prepare('insert into uye_isyeri (uid, uye_adi, uye_soyadi) values (:uid, :uye_adi, :uye_soyadi)');
    	$ekle->bindParam(':uid', $_POST['uid'], PDO::PARAM_INT);
    	$ekle->bindParam(':uye_adi', $_POST['uye_adi'], PDO::PARAM_STR);
    	$ekle->bindParam(':uye_soyadi', $_POST['uye_soyadi'], PDO::PARAM_STR);
    	$ekle->execute();
    şeklinde kullanırsan sorguların daha sağlıklı olur.
  • 04-07-2014, 14:19:43
    #3
    loc adlı üyeden alıntı: mesajı görüntüle
    $ekle = $sql->prepare('insert into uye_isyeri (uid, uye_adi, uye_soyadi) values (:uid, :uye_adi, :uye_soyadi)');
    	$ekle->bindParam(':uid', $_POST['uid'], PDO::PARAM_INT);
    	$ekle->bindParam(':uye_adi', $_POST['uye_adi'], PDO::PARAM_STR);
    	$ekle->bindParam(':uye_soyadi', $_POST['uye_soyadi'], PDO::PARAM_STR);
    	$ekle->execute();
    şeklinde kullanırsan sorguların daha sağlıklı olur.
    bindParam güvenlik anlamında örnek veriyorum mysql_real_escape_string gibi komutları kendisi çalıştırmaktamıdır ?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:19:43 -->-> Daha önceki mesaj 14:14:48 --

    loc adlı üyeden alıntı: mesajı görüntüle
    $ekle = $sql->prepare('insert into uye_isyeri (uid, uye_adi, uye_soyadi) values (:uid, :uye_adi, :uye_soyadi)');
    	$ekle->bindParam(':uid', $_POST['uid'], PDO::PARAM_INT);
    	$ekle->bindParam(':uye_adi', $_POST['uye_adi'], PDO::PARAM_STR);
    	$ekle->bindParam(':uye_soyadi', $_POST['uye_soyadi'], PDO::PARAM_STR);
    	$ekle->execute();
    şeklinde kullanırsan sorguların daha sağlıklı olur.
    Bu arada aynı hatayı almaya devam ediyorum.

    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\engine.php on line 75

    75. Satır ; $query->execute();
  • 04-07-2014, 14:33:34
    #4
    BR9 adlı üyeden alıntı: mesajı görüntüle
    bindParam güvenlik anlamında örnek veriyorum mysql_real_escape_string gibi komutları kendisi çalıştırmaktamıdır ?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:19:43 -->-> Daha önceki mesaj 14:14:48 --



    Bu arada aynı hatayı almaya devam ediyorum.

    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\engine.php on line 75

    75. Satır ; $query->execute();
    Hatayı benim verdiğim kodda mı alıyorsun? Kendi sorgundaki gibi dışarıdan gelen veriyi direkt olarak sql sorgusuna sokma. Verdiğim örnekteki gibi tüm verileri tek tek süz. SQL sorgunun içinde kullandığın tırnaklardan kaynaklanıyor.

    bindParam ile ilgili detaylı bilgiyi şuradan edinebilirsin. http://www.php.net/manual/tr/pdostatement.bindparam.php
  • 04-07-2014, 14:44:42
    #5
    loc adlı üyeden alıntı: mesajı görüntüle
    Hatayı benim verdiğim kodda mı alıyorsun? Kendi sorgundaki gibi dışarıdan gelen veriyi direkt olarak sql sorgusuna sokma. Verdiğim örnekteki gibi tüm verileri tek tek süz.

    bindParam ile ilgili detaylı bilgiyi şuradan edinebilirsin. http://www.php.net/manual/tr/pdostatement.bindparam.php
    Evet sizin verdiğiniz kodda almaktayım hatayı. Dışarıdan gelen veriyi direk sorguya sokmuyorum dışarıdan gelen POST verilerini bindParam ile alıyorum. Fakat kendi oluşturduğum sorgularımı direk sorguya atıyorum. Size detaylı olarak sunayım.

    			$uyeadi			=	strip_tags(addslashes($_POST['uyeadi']));
    			$uyesoyadi		=	strip_tags(addslashes($_POST['uyesoyadi']));
    			$tc				=	strip_tags(addslashes($_POST['tc']));
    			$cinsiyet		=	strip_tags(addslashes($_POST['cinsiyet']));
    			$dogumtarihi	=	strip_tags(addslashes($_POST['dogumtarihi']));
    			$dogumyeri		=	strip_tags(addslashes($_POST['dogumyeri']));
    			$takmabanka		=	strip_tags(addslashes($_POST['takma_bankaadi']));
    			$bankaadi		=	strip_tags(addslashes($_POST['bankaadi']));
    			$hesapno	 	  =	strip_tags(addslashes($_POST['hesapno']));
    			$hesapsahibi	=	strip_tags(addslashes($_POST['hesapsahibi']));
    			$dovizcinsi		=	strip_tags(addslashes($_POST['dovizcinsi']));
    			$uid		 	  =	substr(str_replace(".","",rand()*time()),0,9);
    			$hesapdurumu	=	2;
    			$status			=	1;
    			
    			$query			=	$sql->prepare("INSERT INTO uye_isyeri(uid,uye_adi,uye_soyadi,tc,cinsiyet,dogum_tarihi,dogum_yeri,ilk_kayit_ip,ilk_kayit_tarihi,ilk_kayit_saati,son_islem_tarihi,son_islem_saati,takma_banka_hesabi,banka_adi,hesap_numarasi,hesap_sahibi,doviz_cinsi,hesap_durumu,status)VALUES(:uid,:uye_adi,:uye_soyadi,:tc,:cinsiyet,:dogum_tarihi,:dogum_yeri,:ilk_kayit_ip,:ilk_kayit_tarihi,:ilk_kayit_saati,:son_islem_tarihi,:son_islem_saati,:takma_banka_hesabi,:banka_adi,:hesap_numarasi,:hesap_sahibi,:doviz_cinsi,:hesap_durumu,:status)");
    			
    			$query->bindParam(':uid', $uid, PDO::PARAM_STR);
    			$query->bindParam(':uye_adi', $uyeadi, PDO::PARAM_STR);
    			$query->bindParam(':tc', $tc, PDO::PARAM_STR);
    			$query->bindParam(':cinsiyet', $cinsiyet, PDO::PARAM_INT);
    			$query->bindParam(':dogum_tarihi', $dogumtarihi, PDO::PARAM_STR);
    			$query->bindParam(':dogum_yeri', $dogumyer, PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_tarihi', date('Y-m-d'), PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_saati', date('H:i:s'), PDO::PARAM_STR);
    			$query->bindParam(':son_islem_tarihi', date('Y-m-d'), PDO::PARAM_STR);
    			$query->bindParam(':son_islem_saati', date('H:i:s'), PDO::PARAM_STR);
    			$query->bindParam(':takma_banka_hesabi', $takmabanka, PDO::PARAM_STR);
    			$query->bindParam(':banka_adi', $bankaadi, PDO::PARAM_STR);
    			$query->bindParam(':hesap_numarasi', $hesapno, PDO::PARAM_STR);
    			$query->bindParam(':hesap_sahibi', $hesapsahibi, PDO::PARAM_STR);
    			$query->bindParam(':doviz_cinsi', $dovizcinsi, PDO::PARAM_INT);
    			$query->bindParam(':hesap_durumu', $hesapdurumu, PDO::PARAM_INT);
    			$query->bindParam(':status', $status, PDO::PARAM_INT);
    			$query->execute();
  • 04-07-2014, 14:51:57
    #6
    BR9 adlı üyeden alıntı: mesajı görüntüle
    Evet sizin verdiğiniz kodda almaktayım hatayı. Dışarıdan gelen veriyi direk sorguya sokmuyorum dışarıdan gelen POST verilerini bindParam ile alıyorum. Fakat kendi oluşturduğum sorgularımı direk sorguya atıyorum. Size detaylı olarak sunayım.

    			$uyeadi			=	strip_tags(addslashes($_POST['uyeadi']));
    			$uyesoyadi		=	strip_tags(addslashes($_POST['uyesoyadi']));
    			$tc				=	strip_tags(addslashes($_POST['tc']));
    			$cinsiyet		=	strip_tags(addslashes($_POST['cinsiyet']));
    			$dogumtarihi	=	strip_tags(addslashes($_POST['dogumtarihi']));
    			$dogumyeri		=	strip_tags(addslashes($_POST['dogumyeri']));
    			$takmabanka		=	strip_tags(addslashes($_POST['takma_bankaadi']));
    			$bankaadi		=	strip_tags(addslashes($_POST['bankaadi']));
    			$hesapno	 	  =	strip_tags(addslashes($_POST['hesapno']));
    			$hesapsahibi	=	strip_tags(addslashes($_POST['hesapsahibi']));
    			$dovizcinsi		=	strip_tags(addslashes($_POST['dovizcinsi']));
    			$uid		 	  =	substr(str_replace(".","",rand()*time()),0,9);
    			$hesapdurumu	=	2;
    			$status			=	1;
    			
    			$query			=	$sql->prepare("INSERT INTO uye_isyeri(uid,uye_adi,uye_soyadi,tc,cinsiyet,dogum_tarihi,dogum_yeri,ilk_kayit_ip,ilk_kayit_tarihi,ilk_kayit_saati,son_islem_tarihi,son_islem_saati,takma_banka_hesabi,banka_adi,hesap_numarasi,hesap_sahibi,doviz_cinsi,hesap_durumu,status)VALUES(:uid,:uye_adi,:uye_soyadi,:tc,:cinsiyet,:dogum_tarihi,:dogum_yeri,:ilk_kayit_ip,:ilk_kayit_tarihi,:ilk_kayit_saati,:son_islem_tarihi,:son_islem_saati,:takma_banka_hesabi,:banka_adi,:hesap_numarasi,:hesap_sahibi,:doviz_cinsi,:hesap_durumu,:status)");
    			
    			$query->bindParam(':uid', $uid, PDO::PARAM_STR);
    			$query->bindParam(':uye_adi', $uyeadi, PDO::PARAM_STR);
    			$query->bindParam(':tc', $tc, PDO::PARAM_STR);
    			$query->bindParam(':cinsiyet', $cinsiyet, PDO::PARAM_INT);
    			$query->bindParam(':dogum_tarihi', $dogumtarihi, PDO::PARAM_STR);
    			$query->bindParam(':dogum_yeri', $dogumyer, PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_tarihi', date('Y-m-d'), PDO::PARAM_STR);
    			$query->bindParam(':ilk_kayit_saati', date('H:i:s'), PDO::PARAM_STR);
    			$query->bindParam(':son_islem_tarihi', date('Y-m-d'), PDO::PARAM_STR);
    			$query->bindParam(':son_islem_saati', date('H:i:s'), PDO::PARAM_STR);
    			$query->bindParam(':takma_banka_hesabi', $takmabanka, PDO::PARAM_STR);
    			$query->bindParam(':banka_adi', $bankaadi, PDO::PARAM_STR);
    			$query->bindParam(':hesap_numarasi', $hesapno, PDO::PARAM_STR);
    			$query->bindParam(':hesap_sahibi', $hesapsahibi, PDO::PARAM_STR);
    			$query->bindParam(':doviz_cinsi', $dovizcinsi, PDO::PARAM_INT);
    			$query->bindParam(':hesap_durumu', $hesapdurumu, PDO::PARAM_INT);
    			$query->bindParam(':status', $status, PDO::PARAM_INT);
    			$query->execute();
    Tarih ve ip verilerini de bir değişkene atayıp dener misiniz? Ayrıca PDO::PARAM_INT integer değerleri alabilir. Sayısal değer dışında bir veri giriyorsanız bunu STR olarak değiştirin. Örneğin: Cinsiyet ve Döviz Cinsi
  • 04-07-2014, 14:56:59
    #7
    loc adlı üyeden alıntı: mesajı görüntüle
    Tarih ve ip verilerini de bir değişkene atayıp dener misiniz? Ayrıca PDO::PARAM_INT integer değerleri alabilir. Sayısal değer dışında bir veri giriyorsanız bunu STR olarak değiştirin. Örneğin: Cinsiyet ve Döviz Cinsi
    Evet doğru cinsiyet ve döviz integer değerler. Veritabanı yapısıda o şekilde tarih ve ip değerlerinide değişkene atıp denedim lakin sonuç aynı şu zamana kadar hep PDO kullandım hiç böyle bir sorun yaşamamıştım.

    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\engine.php on line 87

    87. satırda ise $query->execute(); bulunmakta.
  • 04-07-2014, 14:58:28
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    gönderdiğiniz değerler ile, param'larınızın tam uyumlu olduğundan emin olun. değişkenlerdeki filtrelemeleri yaparken, addslashes'ı kaldırın öyle deneyin bir de.
  • 04-07-2014, 15:11:36
    #9
    _BuKi_ adlı üyeden alıntı: mesajı görüntüle
    gönderdiğiniz değerler ile, param'larınızın tam uyumlu olduğundan emin olun. değişkenlerdeki filtrelemeleri yaparken, addslashes'ı kaldırın öyle deneyin bir de.
    Sonuç aynı hocam kodlarda gördüğünüz gibi paramlar ile değerler uyumlu 2 3 kere tekrardan yazdım.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:11:36 -->-> Daha önceki mesaj 15:02:21 --

    :uye_soyadi için bir değişken yokmuş o sorun düzeldi lakin şimdide kayıt yapmıyor.