• 05-08-2018, 11:39:19
    #1
    Pdo ile eklenen verinin son idsini almak istiyorum.
    $sor=$vt->prepare("insert into davpost set postad=:pad,postdesc=:pdes,mak=:pmak");
    $sor->execute(array("pad"=>"Post","pdes"=>"desc","pmak"=>"asx"));
    if($sor->rowCount()>0)
    {
    echo $vt->lastinsertId();
    }
    buradan sonuç 0 dönüyor.
    Buna göre bende
    function sonid($a)
    {
    $diz=array("etiket"=>"select max(linkid) from postlink where link_tip='etiket'"',"gonderiler"=>"select max(id) from davpost ");
    $sor=$vt->query($diz[$a]);
    return $sor->fetch(PDO::FETCH_NUM);
    }
    
    $sor=$vt->prepare("insert into davpost set postad=:pad,postdesc=:pdes,mak=:pmak");
    $sor->execute(array("pad"=>"Post","pdes"=>"desc","pmak"=>"asx"));
    if($sor->rowCount()>0)
    {
    echo sonid("gonderiler");
    }
    Bu fonksiyonda davpost tablosunda eklenen son veri id sini alabiliyorum bunda aklıma takılan sorun aynı anda şu birden fazla veri eklenirse burada sorun oluşur mu yanlış id döndürür mü?
  • 05-08-2018, 11:54:32
    #2
    Misafir adlı üyeden alıntı: mesajı görüntüle
    http://php.net/manual/tr/pdo.lastinsertid.php
    Last insert id denen bir komut var bu iş için
    hocam dikkat ederseniz belirttim işlemiyor sonuç 0 dönüyor.
    Tabloda otonatik artan sütun var



    aCadir adlı üyeden alıntı: mesajı görüntüle
    2. çok uzatmış.
    1. bu olması gerekn. lastid aldığınız kısım sor değil vt olacak.
    vt->lastInsertId();
    konuya yalnış yazmışım düzelttim hocam ama yine aynı 0 döndürüyor
  • 05-08-2018, 12:23:12
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    $MySQL = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $us, $pw);
    $MySQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $MySQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Veri eklendikten sonra aşağıdaki komut ile son id'yi alıyorum.
    $MySQL->lastInsertId();
  • 05-08-2018, 12:23:17
    #4
    $sor=$vt->prepare("insert into davpost set postad=:pad,postdesc=:pdes,mak=:pmak");
    $sor->execute(array("pad"=>"Post","pdes"=>"desc","pmak"=>"asx"));
    [FONT=monospace, serif][COLOR=#c7254e][COLOR=#F9F2F4] [/COLOR][/COLOR][/FONT]
    echo $sor->lastinsertId();
     }
    bu şekilde olacak
    bu select sorgusu olmadığı için 0 satır dönecektir.


    if($sor->rowCount()>0)
    {
    echo $sor->lastinsertId();
    }
  • 05-08-2018, 12:24:49
    #5
    Misafir adlı üyeden alıntı: mesajı görüntüle
    hocam lastinsertid'nin 0 dönmesinin tek sebebi vardır oda siz bu komutu çalıştırdıktan sonra vt bağlantısını kapatıp açıyorsunuzdur.
    Ayrıca sizin kodunuz zaten yanlış "$vt->lastinsertId(); " değil "$sor->lastinsertId(); " olacak
    Ayrıca bu komut konulduysa ve yanlış çalışıyorsa sizin bunun neden yanlış çalıştığını anlamanız bulmanız gerekir alternatif üretmeniz değil
    Yoksa gidip insert ettiğiniz değerleri birebir alıp select sorgusu yazın eklediğiniz datanın size id'si gelir
    direkt veritabanı bağlantısı yapan değişkene yapılması gerekiyor diyor php.nette
    $vt->lastinsertId() şeklinde veritabanı bağlantısında
    try{
    $vt= new Pdo("mysql:host=localhost;dbname=davulga;charset=utf-8","root","");
    }
    catch(PDOEXception $e)
    {
    die("Hata oluştu".$e->getMessage());
    }




    AhmetTulgar adlı üyeden alıntı: mesajı görüntüle
    $MySQL = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $us, $pw);
    $MySQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $MySQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Veri eklendikten sonra aşağıdaki komut ile son id'yi alıyorum.
    $MySQL->lastInsertId();
    $MySQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $MySQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    bu iki kod ne işe yarıyor hocam
  • 05-08-2018, 12:38:20
    #6
    ismail03 adlı üyeden alıntı: mesajı görüntüle
    $MySQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $MySQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    bu iki kod ne işe yarıyor hocam
    PDO::ATTR_ERRMODE: Hata raporlama.
    • PDO::ERRMODE_SILENT: Sadece hata kodlarını atar.
    • PDO::ERRMODE_WARNING: Bir E_WARNING çıktılanır.
    • PDO::ERRMODE_EXCEPTION: Bir istisna oluşur.
    ATTR_EMULATE_PREPARES bu da true verildiği zaman mysql_real_escape fonksiyonu gibi çalışıyor, birden fazla query çalıştırılamıyor tek seferde.
  • 05-08-2018, 13:16:57
    #7
    AhmetTulgar adlı üyeden alıntı: mesajı görüntüle
    PDO::ATTR_ERRMODE: Hata raporlama.
    • PDO::ERRMODE_SILENT: Sadece hata kodlarını atar.
    • PDO::ERRMODE_WARNING: Bir E_WARNING çıktılanır.
    • PDO::ERRMODE_EXCEPTION: Bir istisna oluşur.
    ATTR_EMULATE_PREPARES bu da true verildiği zaman mysql_real_escape fonksiyonu gibi çalışıyor, birden fazla query çalıştırılamıyor tek seferde.
    Hocam bahsettiğiniz gibi kullanıyorum ancak sıfır dönüyor