Вставка данных в базу данных с помощью 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: 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