$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)); PDO Mysql veri ekleme ile ilgili bir soru
19
●8.337
- 04-07-2014, 12:53:10Arkadaş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 ?
- 04-07-2014, 14:13:55
$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:43bindParam güvenlik anlamında örnek veriyorum mysql_real_escape_string gibi komutları kendisi çalıştırmaktamıdır ?loc adlı üyeden alıntı: mesajı görüntüle
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:19:43 -->-> Daha önceki mesaj 14:14:48 --
Bu arada aynı hatayı almaya devam ediyorum.loc adlı üyeden alıntı: mesajı görüntüle
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:34Hatayı 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.BR9 adlı üyeden alıntı: mesajı görüntüle
bindParam ile ilgili detaylı bilgiyi şuradan edinebilirsin. http://www.php.net/manual/tr/pdostatement.bindparam.php - 04-07-2014, 14:44:42Evet 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.loc adlı üyeden alıntı: mesajı görüntüle
$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:57Tarih 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 CinsiBR9 adlı üyeden alıntı: mesajı görüntüle
- 04-07-2014, 14:56:59Evet 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.loc adlı üyeden alıntı: mesajı görüntüle
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, 15:11:36Sonuç aynı hocam kodlarda gördüğünüz gibi paramlar ile değerler uyumlu 2 3 kere tekrardan yazdım._BuKi_ adlı üyeden alıntı: mesajı görüntüle
--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.