PHP ve SQLite Kullanımı

4 Cevap php

Benim uygulama kullanacağız bazı verileri saklamak için küçük bir SQLite veritabanını kullanmak için gidiyorum.

Ancak ben düzgün çalışabilmesi için PHP kullanarak veritabanına veri eklemek için sözdizimi olsun, aşağıda i çalıştırmak için çalışıyorum kod edemeyiz:

<?php
    $day = $_POST["form_Day"];
    $hour = $_POST["form_Hour"];
    $minute = $_POST["form_Minute"];
    $type = $_POST["form_Type"];
    $lane = $_POST["form_Lane"];

    try
    {
        $db = new PDO('sqlite:EVENTS.sqlite');
        $db->exec("INSERT INTO events (Day, Hour, Minute, Type, Lane) VALUES ($day, $hour, $minute, $type, $lane);");
        $db = NULL;
    }
    catch(PDOException $e)
    {
        print 'Exception : '.$e->getMessage();
    }
?>

Ben başarıyla yazdığım bazı kod kullanarak bir SQLite veritabanı dosyası oluşturduk ama sadece cant veritabanına veri eklemek gibi görünüyor.

4 Cevap

Bunu sadece bu gibi sorgu içinde dizeleri ekleyemezsiniz. PDO::quote() ve prepared statements bir göz atın.

vars ($ gün, $ saat, vb) birini boş bir dize döndürür sürece bu söz dizimi ile yanlış bir şey yok.

$db->exec("INSERT INTO events (Day, Hour, Minute, Type, Lane) VALUES ($day, $hour, $minute, $type, $lane);");

Eğer doğrulama olmadan bir SQL deyimi doğrudan $ _POST değişkenleri uygulayarak çünkü ben sql enjeksiyon konusunda daha endişeli olurdum, dedi sahip.

Bunun yerine parametrized sorguları kullanmalısınız. Bu deneyin:

$db = new PDO('sqlite:EVENTS.sqlite');
$stmnt = $db->prepare("INSERT INTO events (Day, Hour, Minute, Type, Lane) VALUES (:day, :hour, :minute, :type, :lane);");
$stmnt->execute( array('day'=>$day,'hour'=>$hour, 'minute'=>$minute, 'type'=>$type, 'lane'=>$lane) );
$db = NULL;

Açıkça COMMIT; ile modifiye DML deyimlerini (INSERT, DELETE, UPDATE) sonra işlemlerini taahhüt etmelidir.