是否可以使用PDO准备语句以这种方式更新表

时间:2016-06-07 06:58:30

标签: 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, :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));

3 个答案:

答案 0 :(得分:0)

试试这个

$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));

答案 1 :(得分:0)

VALUES

您的 :name 子句指定名为execute()的绑定变量,而您传递给execute()的绑定数组(它应该是update() ,而不是: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

请注意,参数WHERE也会通过绑定变量传递给 {{1}} 子句。

答案 2 :(得分:-1)

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

$conn->executeQuery('SELECT * FROM <your_table> WHERE a = ? AND b = ?', [$aVariable, $bVariable]);

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

传递

P.S。从PHP 5.4开始,您可以使用短数组语法,它将array()替换为[]。

COMENT RELATED UPDATE:

我发现你真的可以使用命名参数,但你应该在查询准备后绑定它们: $stmt->bindParam(":fname", $fn, PDO::PARAM_STR); $stmt->bindParam(":city", $ct, PDO::PARAM_STR);