【问题标题】:PDO and PHP help... SQLSTATE[HY093]: Invalid parameter number: no parameters were boundPDO 和 PHP 帮助... SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
【发布时间】:2017-03-25 23:12:35
【问题描述】:

我的项目真的需要帮助。我得到这个错误。工作了2个小时,仍然没有任何线索......:

SQLSTATE[HY093]: 参数号无效:没有绑定参数

我正在尝试从 Form 创建新对象并将其放入数据库。 这是我的代码...

这是我的表格。

<form role="form" method="POST" enctype='multipart/form-data' action="Action/CreateAdmin.php">
<fieldset>
<table>
    <tr>
        <td><div class="form-group">Username</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="Username" name="username" type="text" autofocus>
            </div>
        </td>

    </tr>
    <tr>
        <td><div class="form-group">Password</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="Password" name="password" type="password" value="">
            </div>
        </td>

    </tr>
    <tr>
        <td><div class="form-group">Nama Depan</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="Nama Depan" name="NamaDpn" type="text" value="">
            </div>
        </td>

    </tr>
    <tr>
        <td><div class="form-group">Nama Belakang</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="Nama Belakang" name="NamaBlkng" type="text" value="">
            </div>
        </td>

    </tr>
    <tr>
        <td><div class="form-group">No. Telepon</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="No. Telepon" name="no_telp" type="text" value="">
            </div>
        </td>

    </tr>
    <tr>
        <td><div class="form-group">Previlage</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
            <?php
            $dataRole=$RoleObject -> getAllRole() -> getIterator();
                echo "<select class='form-control' name='role'>";
                while($dataRole -> valid()){
                    echo "<option value='".$dataRole -> current()->getIdRole()."'>".$dataRole->current()->getRoleName()."</option>";
                    $dataRole->next();
                }
                echo"</select>";
            ?>

            </div>
        </td>
    </tr>
    <tr>
        <td><div class="form-group">Kategori</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
            <?php
            $dataKategori=$kategoriObject -> getAllKategori() -> getIterator();
                echo "<select class='form-control' name='kategori'>";
                while($dataKategori -> valid()){
                    echo "<option value='".$dataKategori -> current()->getIdKategori()."'>".$dataKategori->current()->getNamaKategori()."</option>";
                    $dataKategori->next();
                }
                echo"</select>";
            ?>

            </div>
        </td>
    </tr>

    <tr>
        <td><div class="form-group">Foto</div></td>
        <td><div class="form-group">:</div></td>
        <td>
            <div class="form-group">
                <input class="form-control" placeholder="Foto" name="foto" type="file" value="">
            </div>
        </td>
    </tr>
    <br/>
    <?php

    if(isset($_GET["pesan"]))
    {
        if($_GET["pesan"] == MD5("kosong"))
        {
        ?>
            <p style ="color:red;"> Username atau Password kosong. </p>
        <?php

        }
        else if($_GET["pesan"] == MD5("none"))
        {
        ?>
            <p style ="color:red;"> Username atau Password salah. </p>
        <?php

        }
    }

    ?>
    <!-- Change this to a button or input when using this as a form -->
    <tr>
        <td colspan="3"> <button class="btn btn-lg btn-success btn-block" name="btnSubmitAdmin">Submit Admin</button> </td>
    </tr>

</table>
</fieldset>
</form>

This One 是我用于插入的 UserObject 函数

<?php
function insertUser (user $user)
{
    $result=FALSE;

    try{
        $iduser= $user -> getIdUser();
        $username= $user -> getUsername();
        $password= $user -> getPassword();
        $namadpn= $user -> getNamaDpn();
        $namablkng= $user -> getNamaBlkng();
        $notelp= $user -> getNoTelp();
        $role=$user->getRoleId();
        $kategori= $user -> getKategori();
        $foto=$user->getFoto();


        $koneksi=Connection::getConnection();
        $koneksi->beginTransaction();
        $query="INSERT INTO User(id_user, username, password, nama_dpn, nama_blkng, no_telp, id_role, id_kategori,foto) VALUES(?,?,?,?,?,?,?,?,?)";

        $stmt=$koneksi->prepare($query);
        $stmt -> execute();

        $stmt -> bindParam(1, $user->id_user());
        $stmt -> bindParam(2,$user->username());
        $stmt -> bindParam(3, $user->password());
        $stmt -> bindParam(4,$user->nama_dpn());
        $stmt -> bindParam(5, $user->nama_blkng());
        $stmt -> bindParam(6,$user->no_telp());
        $stmt -> bindParam(7,$user->id_role());
        $stmt -> bindParam(8, $user->id_kategori());
        $stmt -> bindParam(9,$user->foto());

        $result=$stmt -> execute();
        $koneksi -> commit();
    }catch(PDOexception $ex){
        echo $ex -> getmessage();
        die();
    }
    $conn = null;
    return $user;
}
}
?>

这是我的表单操作页面。

<?php   
include "../Utility/koneksi.php";
include "../Entity/User.php";
include "../Dao/UserObject.php";
include "../Entity/Role.php";
include "../Dao/RoleObject.php";
$UserObject=new UserObject();
if(isset($_POST["btnSubmitAdmin"]))
{

    $uname = $_POST['username'];
    $pwd = $_POST['password'];
    $nama_dpn = $_POST['NamaDpn'];
    $nama_blkng = $_POST['NamaBlkng'];
    $notelp=$_POST['no_telp'];
    $role=$_POST['role'];
    $kategori=$_POST['kategori'];

    $tipeFile=$_FILES['foto']['type'];
    $lokasiFile=$_FILES['foto']['tmp_name'];
    $namaFile=$_FILES['foto']['name'];
    $ukuranFile=$_FILES['foto']['size'];
    $location="";
    if($tipeFile == "image/jpg" or $tipeFile == "image/jpeg" or $tipeFile== "image/png"){
        $location = "../img/".$namaFile;
        move_uploaded_file($lokasiFile,$location);
    }
    if($namaFile==""){
        $namaFile = "default.jpeg";
    }

    $uname = TRIM($uname); //untuk hapus spasi di depan/ belakang
    $pwd = TRIM($pwd);



    $user=new User();
    $user->setUsername($uname);
    $user->setPassword($pwd);
    $user->setNamaDpn($nama_dpn);
    $user->setNamaBlkng($nama_blkng);
    $user->setNoTelp($notelp);
    $user->setRoleId($role);
    $user->setKategori($kategori);
    $user->setFoto($namaFile);

    if($UserObject->insertUser($user)){
        echo "<script>alert('Success')</script>";
    }
}
?>

有什么想法吗?

提前致谢

【问题讨论】:

  • 这有很多代码需要我们来处理,尤其是当您没有告诉我们在哪里所有这些中的错误...
  • 找到了。您需要在execute 绑定之后。目前你有一个$stmt -&gt; execute();准备后直接。

标签: php pdo


【解决方案1】:

您正在尝试在绑定任何参数之前执行该语句:

$stmt = $koneksi->prepare($query);
$stmt->execute();

先准备查询,再绑定参数,然后执行查询。

注意:你也可以在绑定参数后再次执行语句:

$result = $stmt->execute();

我怀疑您只需要执行该语句一次,因此您可以完全删除第一次执行尝试。

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2019-10-08
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多