使用pdo在两个mysql表中插入记录

时间:2016-03-02 21:07:48

标签: php mysql database pdo

我一直试图用两个不同的查询来做这个,但只有第一个有效。 PDO对我来说是新的,这就是为什么我有点混淆。

    <?php
include 'database.php';
$nombres=$_POST['tnombres'];
$apellidos=$_POST['tapellidos'];
$carrera=$_POST['tcarrera'];
$con->beginTransaction();

try{

        // insert query
        $query = "INSERT INTO alumno (nombres,apellidos) VALUES (:nombres,:apellidos)"`;`

        // prepare query for execution
        $stmt = $con->prepare($query);

        // bind the parameters
        $stmt->bindValue(':nombres',$nombres,PDO::PARAM_STR);
        $stmt->bindValue(':apellidos',$apellidos,PDO::PARAM_STR );
        $stmt->execute();
        $ultimo=$con->lastInsertId();

        $query = "INSERT INTO ficha (fechaingreso,carrera,alumno_id) VALUES (:fechaingreso,:carrera,:alumno_id)";
        $stmt = $con->prepare($query);

        $fecha=  date('d-m-Y');
        $stmt->bindValue(':fechaingreso',$fecha);
        $stmt->bindValue(':carrera',$carrera);
        $stmt->bindValue(':alumnoid',$ultimo);
        $stmt->execute();

        $con->commit(); 
        echo 'Datos insertados';
        echo '<p><a href=index.php>Inicio</a></p>';
        echo "<p>Numero de ultimo registro insertado: ",$ultimo;
    }

    // show error
    catch(PDOException $e){
        $con->rollback();
        echo $e->getMessage();
    }

就像我之前说的那样,在第一个查询工作完美之前,即使从最后插入的记录中捕获id也可以正常工作,但第二个查询不会做它必须做的事情。 我有这条错误消息

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\escuela\crear.php on line 32

1 个答案:

答案 0 :(得分:1)

您的脚本中有拼写错误。在您使用INSERT的{​​{1}}中,但稍后您尝试通过alumno_id绑定该值。

alumnoid

缺少下划线 - $query = "INSERT INTO ficha (fechaingreso,carrera,alumno_id) VALUES (:fechaingreso,:carrera,:alumno_id)"; alumnoid不同。

alumno_id

正如@FirstOne已经提到的那样:解决方案是在两个变量之一中添加或删除$stmt->bindValue(':alumnoid',$ultimo); 下划线。