2016-06-07 53 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'。再次感謝.. –