【问题标题】:PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number:PHP 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY093]:无效的参数号:
【发布时间】:2015-04-07 03:39:09
【问题描述】:

我在尝试运行此查询时收到错误“SQLSTATE[HY093]: Invalid parameter number”:

<?php
include "../config/c_config.php";
$db = dbConn::getConnection();

$pmuid = $_POST['txtuid'];
$pnml = $_POST['txtnm'];
$ptgll = $_POST['txttgl'];
$jk = $_POST['optjk'];
$palamat = $_POST['txtalamat'];
$idv = $_POST['cbprov'];
$idc = $_POST['cbcity'];
$pkode = $_POST['txtkodepos'];
$pphone= $_POST['txtnophone'];
$pemkof= $_POST['txtmailinf'];
$pimg = $_POST['fileimg'];
$pdate=date("Y-m-d H:i:s");

// Update data on mysql
$sqlep = "UPDATE str_user_mamber_profile SET
profile_nama_lengkap=:pnml,
profile_jk=:jk,
profile_tgl_lahir=:ptgll,
profile_alamat=:palamat,
id_provinsi=:idv,
id_city=:idc,
profile_kodepos=:pkode,
profile_phone=:pphone,
profile_email_konfirmasi=:pemkof,
profile_date=:pdate 
WHERE mamber_unique_id = :pmuid";

$qep = $db->prepare($sqlep);
$qep->execute(array(":pnml"=>$pnml,
                    ":jk"=>$jk,
                    ":ptgll"=>$ptgll,
                    ":palamat"=>$palamat,
                    ":idv"=>$idv,
                    ":idc"=>$idc,
                    ":pkode"=>$pkode,
                    ":pphone"=>$pphone,
                    ":pemkof"=>$pemkof,
                    ":pdate"=>$pdate,
                    ":pmuid"=>$pmuid));
if($qep){
    echo 'work';
}else{
    echo 'not work';
}
?>

运行后,此查询给出结果“WORK”但不更新数据库。我尝试搜索有关此错误的相同问题,但无法帮助我修复。你能帮我看看查询有什么问题吗?

谢谢

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    改变

    ":pnml"=>$pnml,
    

    到

    "pnml"=>$pnml,
    

    “执行”方法中的任何地方

    $qep->execute(array("pnml"=>$pnml,
                        "jk"=>$jk,
                        "ptgll"=>$ptgll,
                        "palamat"=>$palamat,
                        "idv"=>$idv,
                        "idc"=>$idc,
                        "pkode"=>$pkode,
                        "pphone"=>$pphone,
                        "pemkof"=>$pemkof,
                        "pdate"=>$pdate,
                        "pmuid"=>$pmuid));
    

    【讨论】:

    • @chris85 支持命名参数绑定:php.net/manual/en/pdostatement.bindparam.php
    • @chris85 如果您不知道它是如何工作的,为什么要拒​​绝我的回答?
    • 我没有记下你的答案,我问了一个问题。据我所知,您的回答没有任何反对票。
    • @chris85,谢谢.. 但我没有看到数据库有任何变化,我很困惑。
    • @RiskiFebriansyah 这是约翰的答案,不是我的。我将删除我的评论,因为它与主题无关。
    【解决方案2】:

    $qep 是一个声明对象,并且永远是真实的。您需要捕获执行语句的结果:

    $result = $qep->execute(...);
    if ($result){
        echo 'work';
    } else {
        echo 'not work';
        var_dump($qep->errorInfo());
    }
    

    使用$_POST 值而不检查它们是否已设置也可能会给您很多警告。

    【讨论】:

    • 谢谢.. 我收到了这个警告。 array(3) {undefined: [2], 00000: [1]} 00000: [1] 0: 1 undefined: [2] 0: 2 这是什么意思?
    • 我已经捕获了结果
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2017-07-06
    • 2017-04-26
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多