【问题标题】:SQLSTATE[HY093]: Invalid parameter number PHP PDO + MYSQL - form [duplicate]SQLSTATE [HY093]:无效的参数号 PHP PDO + MYSQL - 表单 [重复]
【发布时间】:2016-08-27 14:36:03
【问题描述】:

您好,我有一个问题,我有一个记录,其中有 4 个表,每个表都与它们使用 lastInsertId 来获取最后插入的 id 生成有关,但是我遇到了这个小问题。

这是我的代码类:

public function regnuevo($ruc,$pwd,$rsocial,$ncomercial,$direfiscal,$telefono,$web,$rucs,$direfac,$nombre,$paterno,$materno,$cargo,$celular,$email){


        try{

            $insertar = $this->bd->prepare("INSERT INTO empresa (ruc,pwd,razonsocial,nombrecomercial,direccionfiscal,departamento,distrito,provincia,estado) values (:ruc,:pwd,:rsocial,:ncomercial,:direfiscal,15,1249,129,1)");

            $insertar->bindparam(":ruc",$ruc);
            $insertar->bindparam(":pwd",$pwd);
            $insertar->bindparam(":rsocial",$rsocial);
            $insertar->bindparam(":ncomercial",$ncomercial);
            $insertar->bindparam(":direfiscal",$direfiscal);
            $insertar->execute();
            $ultimoid = $this->bd->lastInsertId();

            $insertar = $this->bd->prepare("INSERT INTO empresa_detalle (telefono1,web,ruc,id_empresa) values(:telefonos,:web,:ruc,:id_emp)");
            $insertar->bindparam(":telefonos",$telefono);
            $insertar->bindparam(":web",$web);
            $insertar->bindparam(":ruc",$rucs);
            $insertar->bindparam(":id_emp",$ultimoid);
            $insertar->execute();

            $insertar = $this->bd->prepare("INSERT INTO datosfacturacion (direccion,id_empresa) values(:dire,:id_empf)");
            $insertar->bindparam(":dire",$direfac);
            $insertar->bindparam(":id_empf",$ultimoid);
            $insertar->execute();

            $insertar1 = $this->bd->prepare("INSERT INTO socios(nombre,apaterno,amaterno,cargo,grado,tipodocumento,genero,celular,correooficina,estado,id_empresa) values(:nombre,:apaterno,:amaterno,:cargo,1,1,1,:telefono,:email,'1',:id_empresa)");

            $insertar1->execute(array(":nombre" => $nombre,
                                     "apaterno"=>$paterno,
                                     ":materno"=>$materno,
                                     ":cargo"=>$cargo,
                                     ":celular"=>$celular,
                                     ":id_empresa"=>$ultimoid,
                                     ":email"=>$email));

                return true;

        }
        catch(PDOException $e)  {


            echo $e->getMessage();
            return false;
    }

这是一个表格:

<div class="container">
   <form action="reg_nuevo.php" class="form-horizontal" method="post">
       <div class="form-group">
          <p class="txticon"><span class="glyphicon glyphicon-plus-sign iconos"></span> Registro de Nuevo Socio</p>
          *Solo se puede registrar 3 socios por empresa en caso de tener 4 socios comuniquese con el área de Sistemas
       </div>
       <div class="form-group">
           <label for="" class="control-label col-md-2">R.U.C</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="ruc">
           </div>
            <label for="" class="control-label col-md-2">Razón Social</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="raz">
           </div>
       </div>

       <div class="form-group">
           <label for="" class="control-label col-md-2">Nombre Comercial</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="comercial">
           </div>
              <label for="" class="control-label col-md-2">Dirección Fiscal</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="direccion">
           </div>
       </div>

       <div class="form-group">
           <label for="" class="control-label col-md-2">Telefono</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="telefono">
           </div>
           <label for="" class="control-label col-md-2">Dirección de entrega de Factura</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="facturacion">
           </div>
       </div>


       <div class="form-group">
           <label for="" class="control-label col-md-2">Web</label>
           <div class="col-md-3">
               <input type="text" class="form-control" name="web">
           </div>
       </div>

       <div class="form-group col-md-12">
         <div class="form-group child col-md-12">
           <p class="txticon"><span class="glyphicon glyphicon-user iconos"></span>Registro de Socio</p>

          <div class="form-group">
            <label for="" class="control-label col-md-1">Nombre</label>
           <div class="col-md-2">
               <input type="text" class="form-control" name="socio">
           </div>
            <label for="" class="control-label col-md-1">A.Paterno</label>
           <div class="col-md-2">
               <input type="text" class="form-control" name="paterno">
           </div>
            <label for="" class="control-label col-md-1">A.Materno</label>
           <div class="col-md-2">
               <input type="text" class="form-control" name="materno">
           </div>
       </div>

        <div class="form-group">
             <label for="" class="control-label col-md-1">Cargo</label>
           <div class="col-md-2">
               <input type="text" class="form-control" name="cargo">
           </div>
            <label for="" class="control-label col-md-1">Email</label>
           <div class="col-md-2">
               <input type="email" class="form-control" name="email">
           </div>
            <label for="" class="control-label col-md-1">Telefono</label>
           <div class="col-md-2">
               <input type="text" class="form-control" name="celular">
           </div>
       </div>
   <!--<input class="btn btn-danger deleteButton cerrar" type="button" value="Eliminar" />-->
</div>
</div>
<!--<input class="btn btn-success cerrar" type="button" id="create_button" value="Agregar Socio" />-->
<input class="btn btn-lg btn-info" type="submit" value="Registrar" name="enviar">
      </form>

【问题讨论】:

  • 修复 "apaterno"=&gt;$paterno,":apaterno"=&gt;$paterno,
  • @Armen 不需要 stackoverflow.com/q/9778887 仅在值中需要冒号。
  • 好的@Fred-ii-谢谢我不知道
  • @Armen 不客气。

标签: php mysql pdo


【解决方案1】:

最后插入错误,缺少两个命名放置孔,:celular(可能是:telefono),:materno:amaterno)不存在

        $insertar1 = $this->bd->prepare("INSERT INTO socios(nombre,apaterno,amaterno,cargo,grado,tipodocumento,genero,celular,correooficina,estado,id_empresa)
        values(:nombre,:apaterno,:amaterno,:cargo,1,1,1,:telefono,:email,'1',:id_empresa)");

$insertar1->execute(array(":nombre" => $nombre,
                                 "apaterno"=>$paterno,
                                 ":materno"=>$materno,
                                 ":cargo"=>$cargo,
                                 ":celular"=>$celular,
                                 ":id_empresa"=>$ultimoid,
                                 ":email"=>$email)); 

修复数组键名与占位符的匹配:

$insertar1->execute(array(":nombre" => $nombre,
                                 "apaterno"=>$paterno,
                                 ":amaterno"=>$materno,
                                 ":cargo"=>$cargo,
                                 ":telefono"=>$celular,
                                 ":id_empresa"=>$ultimoid,
                                 ":email"=>$email));

【讨论】:

  • @EdinsonGutierrezVargas 你说,错误是在插入到 socials 之前?
  • 是的,错误是当它到达插入 jquery socials 但 empresa、empresa_detalle 和 facturacion 插入但不是 socials 表时:/
  • @EdinsonGutierrezVargas 修改后报错信息一样吗?
  • 是的,修改后报错信息一样(SQLSTATE [HY093]: Invalid parameter number: parameter was not defined)
  • 问题是soluccionado 非常感谢,没有看到他的materno 外观参数是amaterno
【解决方案2】:

您正在混合参数::celular 应该是 :telefono:materno 应该是 :amaterno 在您的 $insertar1 查询中。

看来您需要通过将: 添加到:apaterno 来修复"apaterno"=&gt;$paterno,

像这样:":apaterno"=&gt;$paterno,(回复:Is the leading colon for parameter names passed to PDOStatement::bindParam() optional?

完整代码变为:

$insertar1 = $this->bd->prepare(
    "INSERT INTO socios(
        nombre,
        apaterno,
        amaterno,
        cargo,
        grado,
        tipodocumento,
        genero,
        celular,
        correooficina,
        estado,
        id_empresa
    ) values (
        :nombre,
        :apaterno,
        :amaterno,
        :cargo,
        1,
        1,
        1,
        :telefono,
        :email,
        '1',
        :id_empresa
    )"
);

$insertar1->execute(array(":nombre" => $nombre,
                          ":apaterno"=>$paterno,
                          ":amaterno"=>$materno,
                          ":cargo"=>$cargo,
                          ":telefono"=>$celular,
                          ":email"=>$email,
                          ":id_empresa"=>$ultimoid
));

【讨论】:

  • 不需要stackoverflow.com/q/9778887,仅在值中需要冒号,根据您的原始stackoverflow.com/revisions/36989101/1
  • 添加:一个类,但问题仍然存在
  • @Fred-ii- 虽然它可能有效(我从未亲自测试过,所以我无法与之交谈),但我建议不要省略它们。该手册没有说明可以将冒号排除在绑定之外,因此最好使用它。不过谢谢你指出来。
  • 马库斯,您无需对其进行测试,这是一个鲜为人知的“事实”;-) 查看所有链接。
  • 哈哈。我必须测试才能确定;)我就是这样做的。但不是说我不同意你。不要误会我的意思。
猜你喜欢
  • 2017-06-10
  • 2015-06-04
  • 2016-12-15
  • 2022-01-10
  • 2019-02-24
  • 2014-06-29
  • 2014-02-10
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多