Mysql 是否可以使用PDO prepare Station以这种方式更新表

Mysql 是否可以使用PDO prepare Station以这种方式更新表,mysql,pdo,Mysql,Pdo,我正在尝试更新MySQL表,但它引发了一个错误: 'SQLSTATE[HY093]:参数编号无效:未定义参数' 这是我的密码 $sql = " UPDATE registration SET fname, city, zip_code, state, tele_no, PayPal_email, mobile_no,address VALUES :name, :city, :zip_code, :state, :tele_no, :PayPal_email, :mo

我正在尝试更新MySQL表,但它引发了一个错误:

'SQLSTATE[HY093]:参数编号无效:未定义参数'

这是我的密码

$sql = "
    UPDATE registration 
    SET fname, city, zip_code, state, tele_no, PayPal_email, mobile_no,address  
    VALUES :name, :city, :zip_code, :state, :tele_no, :PayPal_email, :mobile_no, :address 
    WHERE id = $id
";

$result = $stud->update($sql, array(":fname"=>$fn, ":city"=>$ct, ":zip_code"=>$zp, ":state"=>$st, ":tele_no"=>$off, ":PayPal_email"=>$pel, ":mobile_no"=>$mn, ":address"=>$ad));

据我所知,PDO使用以下sinax:

$conn->executeQuery('SELECT*,其中a=?和b=?',[$aVariable,$bVariable]);

我的意思是,您应该将
:fname
:city
等替换为
,并将变量作为简单数组传递
[$fn,$ct,…]

另外,由于PHP5.4,您可以使用短数组语法,它将数组()替换为[]

与COMENT相关的更新:

正如我发现的,您确实可以使用命名参数,但是您应该在查询准备之后绑定它们:
$stmt->bindParam(“:fname”,$fn,PDO::PARAM_STR);
$stmt->bindParam(“:city”,$ct,PDO::PARAM_STR)

就这样试试吧

$stm = $db->prepare($sql);
$stm->execute(array(":fname"=>$fn,":city"=>$ct,":zip_code"=>$zp,":state"=>$st,":tele_no"=>$off,":PayPal_email"=>$pel,":mobile_no"=>$mn,":address"=>$ad));
value
子句指定名为
:name
的绑定变量,而传递给
执行()
的绑定数组(应该是
执行()
,而不是
更新()
)指定名为
:fname
的绑定变量。这就是您引用的特定错误消息的原因

您的语法中也有一些错误,因此解决一个问题并不能解决所有问题。正确的语法应该是

$sql = "UPDATE registration 
          SET fname = :name,
              city = :city,
              zip_code = :zip_code,
              state = :state,
              tele_no = :tele_no,
              PayPal_email = :PayPal_email,
              mobile_no = :mobile_no,
              address = :address
            WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':fname' => $fn, ':city' => $ct, ':zip_code' => $zp, ':state' => $st, ':tele_no' => $off, ':PayPal_email' => $pel, ':mobile_no' => $mn, ':address' => $ad, ':id' => $id));

请注意,参数
$id
也通过绑定变量传递给
子句。

很抱歉我在这里输入了代码,这里实际使用了“update()”方法来传递参数。我尝试了你的代码,但显示了相同的错误。。谢谢你的帮助。非常感谢。它工作得很好,我使用的代码中有一个小问题:name'而不是:fname'。再次感谢。。
$sql = "UPDATE registration 
          SET fname = :name,
              city = :city,
              zip_code = :zip_code,
              state = :state,
              tele_no = :tele_no,
              PayPal_email = :PayPal_email,
              mobile_no = :mobile_no,
              address = :address
            WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':fname' => $fn, ':city' => $ct, ':zip_code' => $zp, ':state' => $st, ':tele_no' => $off, ':PayPal_email' => $pel, ':mobile_no' => $mn, ':address' => $ad, ':id' => $id));