Вмъкване на данни в база данни с помощта на php

Нов съм в php. Създадох php формуляр, който ще вмъква данни в базата данни, името на моята база данни е Emp, а името на таблицата е info. Вмъквам с PDO. Написах код за това и той се изпълнява, без да улавя никакви грешки, но базата данни все още е празна. Публикувах кода си по-долу, моля, кажете ми какво правя грешно.

<?php
    try{
        echo $_POST['name'].", ".$_POST['age'].", ".$_POST['email'].", ".$_POST['name'].", ".$_POST['country'].", ". $_POST['city'] ;
        $user="root";
        $pass="root123";
                    $con=new PDO('mysql:host=localhost;dbname=Emp', $user, $pass);
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $con->beginTransaction();
        //echo "INSERT INTO info(Empid,Ename,Age,Email,Country,City,Salary) VALUES('".$_POST['eid']."','".$_POST['name']."','".$_POST['age']."','".$_POST['email']."','".$_POST['country']."','".$_POST['city']."','".$_POST['salary']."')";
        $num=$con->exec("INSERT INTO info(Empid,Ename,Age,Email,Country,City,Salary) VALUES('".$_POST['eid']."','".$_POST['name']."','".$_POST['age']."','".$_POST['email']."','".$_POST['country']."','".$_POST['city']."','".$_POST['salary']."')");
        echo "<br>".$num." row added succesfully"; // this is displayed when I execute this but database is empty.
    }
    catch(Exception $e)
    {
        echo 'Exception -> ';
        var_dump($e->getMessage());
    }
    ?> 

person user2655318    schedule 11.09.2013    source източник
comment
какво се случва, когато стартирате тази заявка директно във вашата база данни?   -  person zzlalani    schedule 11.09.2013
comment
Започвате транзакция с beginTransaction(), но тя няма да се появи в базата данни, докато не финализирате транзакцията с commit()   -  person    schedule 11.09.2013
comment
Майк е прав, трябва да commit @user2655318   -  person zzlalani    schedule 11.09.2013
comment
Допълнителна забележка: моля, прочетете параграфа за PDO и обвързаните параметри в този документ, за да избегнете SQL injectin: phptherightway.com/# бази данни   -  person herrjeh42    schedule 11.09.2013


Отговори (3)


трябва или да ангажирате, или да отмените транзакцията ..

промените, направени в базата данни чрез PDO транзакциите, не се ангажират, докато не прекратите транзакцията чрез извикване на PDO::commit() или Calling PDO::rollBack()

<?php
try{
    echo $_POST['name'].", ".$_POST['age'].", ".$_POST['email'].", ".$_POST['name'].", ".$_POST['country'].", ". $_POST['city'] ;
   ...
  $con->beginTransaction();
  ....
   $con->commit();
}
catch(Exception $e)
{
    echo 'Exception -> ';
    var_dump($e->getMessage());
     $con->rollBack();
}
?> 
person bipen    schedule 11.09.2013
comment
Между другото няма значение, но имате правописна грешка тук $conn->commit(); и също така имаме същия код в нашите отговори. странно :/ - person zzlalani; 11.09.2013

Тъй като сте използвали beginTransaction(), трябва да commit промените. Добавете

$con->commit();

Справка: Ръководство за PHP

Забележка: Въпреки че използвате PDO, вие все още интерполирате стойности на HTTP заявка без дезинфекция, това може да е лошо

person Hanky Panky    schedule 11.09.2013

Всичко, което трябва да направите, е да commit и/или rollBack вашия код

<?php
    try{
        .
        . code
        .
        $con->beginTransaction();
        .
        . code
        .
        $num=$con->exec("INSERT INTO info (Empid,Ename,Age,Email,Country,City,Salary) VALUES('".$_POST['eid']."','".$_POST['name']."','".$_POST['age']."','".$_POST['email']."','".$_POST['country']."','".$_POST['city']."','".$_POST['salary']."')");
        $con->commit(); // This is missing
    }
    catch(Exception $e)
    {
        var_dump($e->getMessage());
        $con->rollBack(); //  And this is missing
    }
?> 
person zzlalani    schedule 11.09.2013