Php 条件PDO bindParam更新

Php 条件PDO bindParam更新,php,mysql,pdo,Php,Mysql,Pdo,因此,我尝试进行条件更新,但似乎在将数据与语句绑定时遇到了问题 功能: function updateEditor($email, $first, $last, $id){ global $DBH; $response = false; $upemail = ""; $upfirst = ""; $uplast = ""; $stmt = "SELECT memEmail, memFirst, memLast FROM MEMBER WHERE memID = :id"; try{ $

因此,我尝试进行条件更新,但似乎在将数据与语句绑定时遇到了问题

功能:

function updateEditor($email, $first, $last, $id){
global $DBH;
$response = false;
$upemail = "";
$upfirst = "";
$uplast = "";

$stmt = "SELECT memEmail, memFirst, memLast FROM MEMBER WHERE memID = :id";
try{
    $STH = $DBH->prepare($stmt);
    $STH->bindParam(':id', $id);
    $STH->execute();

    $STH->setFetchMode(PDO::FETCH_ASSOC);
    $row = $STH->fetch();
    if($row['memEmail'] != $email){ $upemail = $email;}
    if($row['memFirst'] != $first){ $upfirst = $first;}
    if($row['memLast'] != $last){ $uplast = $last;}

}catch(PDOException $e) {
    echo $e->getMessage() . "first";

}
$stmt .= "UPDATE MEMBER SET ";
if(!empty($upemail)){
    $stmt .= "memEmail = :memEmail";
    if(!empty($upfirst) || !empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($upfirst)){
    $stmt .= "memFirst = :memFirst";
    if(!empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($uplast)){
    $stmt .= "memLast = :memLast";
}
if(empty($upemail) && empty($upfirst) && empty($uplast)){
    return false;
}else{
    $stmt .= " WHERE memID = :id";
}

try{
    $STH = $DBH->prepare($stmt);
    if(!empty($upemail)){$STH->bindParam(':memEmail', $upemail);}else{$STH->bindParam(':memEmail', $row['memEmail']);}
    if(!empty($upfirst)){$STH->bindParam(':memFirst', $upfirst);}else{$STH->bindParam(':memFirst', $row['memFirst']);}
    if(!empty($uplast)){$STH->bindParam(':memLast', $uplast);}else{$STH->bindParam(':memLast', $row['memLast']);}
    $STH->bindParam(':id', $id);
    $STH->execute();

    $STH->setFetchMode(PDO::FETCH_ASSOC);

    $response = true;
}catch(PDOException $e) {
    echo $e->getMessage() . "second";
    $response = $e->getMessage() . "second";

}
return $response;
}
到目前为止,我已经尝试使用
和上面的代码将变量放入语句中。我经常遇到的错误是:

SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配

在这里:

将更新附加到以前的
$stmt
字符串。你最终会得到:

$stmt = "SELECT memEmail, memFirst, memLast FROM MEMBER WHERE memID = :idUPDATE MEMBER SET "; // and the rest
重新输入一个或多个标识符(
:idUPDATE

删除
以在此字符串中启动新查询

$stmt = "UPDATE MEMBER SET ";
注:
你把这条路弄得太复杂了。跳过对空值的检查,在更新数据集时只更新所有列,首先检查更改的内容和未更改的内容不会获得任何结果。

此处:

将更新附加到以前的
$stmt
字符串。你最终会得到:

$stmt = "SELECT memEmail, memFirst, memLast FROM MEMBER WHERE memID = :idUPDATE MEMBER SET "; // and the rest
重新输入一个或多个标识符(
:idUPDATE

删除
以在此字符串中启动新查询

$stmt = "UPDATE MEMBER SET ";
注:

你把这条路弄得太复杂了。跳过对空值的检查,只需在更新数据集时更新所有列,首先检查更改的内容和未更改的内容不会获得任何结果。

除@Gerald Schneider answer外,您在这两种情况下都设置了参数(if/else)

但是,我们只在一种情况下定义参数

if(!empty($upemail)){
    $stmt .= "memEmail = :memEmail";
    if(!empty($upfirst) || !empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($upfirst)){
    $stmt .= "memFirst = :memFirst";
    if(!empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($uplast)){
    $stmt .= "memLast = :memLast";
}

除了@Gerald Schneider answer之外,没有其他条件

,您在这两种情况下都设置了参数(if/else)

但是,我们只在一种情况下定义参数

if(!empty($upemail)){
    $stmt .= "memEmail = :memEmail";
    if(!empty($upfirst) || !empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($upfirst)){
    $stmt .= "memFirst = :memFirst";
    if(!empty($uplast)){
        $stmt .= ", ";
    }
}
if(!empty($uplast)){
    $stmt .= "memLast = :memLast";
}

没有其他条件

抱歉,这是测试。错误来自第二个
try
语句您正在if和else语句中设置参数。但在查询中,仅当参数不为空时才包含参数。很抱歉,这是测试。错误来自第二个
try
语句您正在if和else语句中设置参数。但是在查询中,只有当参数不是空的时候,才包括它。我把它放在没有
的地方,仍然是相同的错误。我更改了第一个
stmt
的名称,但仍然得到相同的错误。在您准备它并将其与绑定进行比较之前,请回送
$stmt
。我将其放置在没有
的情况下,仍然存在相同的错误。我更改了第一个
stmt
的名称,但仍然得到相同的错误。在您准备它并与您的绑定进行比较之前,请回送
$stmt