2016-06-07 40 views
-1

我试图更新我的MySQL表,但它抛出一个错误来更新表是这样的:是有可能使用PDO准备statment

'SQLSTATE[HY093]: Invalid parameter number: parameter was not define'

这里是我的代码

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

回答

-1

由于据我所知PDO使用以下sinax:

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

我由t您应该将:fname:city等替换为?,并将其作为简单数组传递给变量[$fn, $ct, ...]

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

COMENT相关的更新:

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

+0

[命名占位符是最知名的PDO的优势之一(https://phpdelusions.net/pdo/mysqli_comparison#named) –

+0

谢谢@YourCommonSense它是非常有用的链接 –

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)); 
0
... 
VALUES :name, ... 
... 
$result = $stud->update($sql, array(":fname" => $fn, ... 

您的VALUES子句指定绑定变量na med :name,而您传递给​​(并且它应该是​​,而不是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条款。

+0

对不起,我在这里输入的代码,实际上'update()'方法用于传递参数。我试过你的代码,但显示相同的错误..感谢您的帮助.. –

+0

非常感谢你的工作正常,有一个小问题,我用代码':name'代替':fname'。再次感谢.. –