2014-02-28 156 views
0

PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:無效參數編號:綁定變量數不匹配即時獲取此錯誤爲什麼?列名是正確的。PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:無效

enter image description here

$baslik   = $_POST["makale_basligi"]; 
$icerik   = trim($_POST["makale_icerigi"]); 
$meta_desc  = $_POST["makale_meta_description"]; 
$id    = $_POST["makale_id"]; 
$kategori  = $_POST["makale_kategorisi"]; 
$makale_link = convertTextToLinkFormat($baslik); 

$update_makale = $db->prepare("UPDATE makale SET " 
     . "makale_kategorisi  = :kategori," 
     . "makale_link_baslik  = :link," 
     . "makale_baslik   = :baslik, " 
     . "makale_icerik   = :icerik, " 
     . "makale_meta_description = :desc WHERE makale_id = '".$id."' "); 
$update_makale->execute(array(':kategori'=>$kategori,':link'=>$makale_link ,':baslik' =>$baslik,':icerik' =>$icerik,':desc' =>$meta_desc)); 
+3

你爲什麼要追加'$ id'直接查詢?準備好陳述的唯一方法就是正確使用它們。 –

+0

你是對的,但是,它有問題嗎? – hakiko

+2

可能。 '$ id'包含什麼?如果它包含'?'或者':',那麼它可以被解釋爲參數。或者更糟糕的是,如果我使用SQL注入來打破您的查詢;) –

回答

0

我不認爲這是硬編碼$id值,並將其與PDO參數混個好主意。 它的錯誤容易發生,而且ID在你的表中被定義爲int,所以你爲什麼要引用它?

放入數組中與其他參數:

$update_makale = $db->prepare("UPDATE makale SET " 
     . "makale_kategorisi  = :kategori," 
     . "makale_link_baslik  = :link," 
     . "makale_baslik   = :baslik, " 
     . "makale_icerik   = :icerik, " 
     . "makale_meta_description = :desc WHERE makale_id = :id"); 

$update_makale->execute(array(
    ':kategori' => $kategori, 
    ':link' => $makale_link, 
    ':baslik' => $baslik, 
    ':icerik' => $icerik, 
    ':desc' => $meta_desc, 
    ':id' => $id 
)); 
相關問題