2015-12-20 71 views
-3

我正在做一個小型項目,用戶需要更新配置文件圖片(tbl_users中有9個字段,9個字段中只需要更新1個字段(location)for image,所以我在PDO中有代碼,在使用PDO進行圖像字段更新時出現錯誤, 錯誤顯示如下:未知的異常'PDOException'帶有消息'SQLSTATE [HY093]

致命錯誤:未收到異常'PDOException',消息'SQLSTATE [HY093]:Invalid參數編號:綁定變量的數量與令牌數量不匹配「/home/fewatrai/public_html/user_login/myprofile.php:266堆棧跟蹤:#0 /home/fewatrai/public_html/user_login/myprofile.php(266): PDOStatement-> execute()#1 {main}引發/home/fewatrai/public_html/user_login/myprofile.php 266行

我知道,錯誤來自哪裏,它應該是undefined uid值的原因(我不能這麼做! )

在同一頁上,我要顯示所有與此代碼的記錄: 隨着圖像的更新代碼:

<?php 
session started..... 
$stmt = $user_home->runQuery("select * from tbl_users WHERE userID=:uid"); 
$stmt->execute(array(":uid"=>$_SESSION['userSession'])); 
$row = $stmt->fetch(PDO::FETCH_ASSOC); 
?> 
..... 
<?php echo $row['firstName']?> 
...... 
...... 
<form action="#" method="post" enctype="multipart/form-data"> 
<input type="file" name="file" /> 
<input type="submit" name="action" value="update" /> 
</form> 
<?php 
$connectionClass = new Database(); 
$conn = $connectionClass->dbConnection(); 
$action = isset($_POST['action']) ? $_POST['action'] : ""; 
if($action == "update"){ 
$location = $_POST['location']; 
$path = "images/" . $_FILES['location']['name']; 
move_uploaded_file($_FILES['location']['tmp_name'], "uploads/".$path); 
$query = 'update tbl_users set location = :location WHERE userID=:uid'; 
$stmt = $conn->prepare($query); 
$stmt->bindParam(':location', $location, PDO::PARAM_STR); 
// echo "here should be bindParam for userID field, but i really have no idea on it.."; 
$stmt->execute(); 
}?> 

我的代碼頁是如下的數據庫連接和文件上傳頁面。

dbconfig.php

<?php 
class Database 
    { 
     private $host = "localhost"; 
     private $user= "root"; 
     private $pass= ""; 
     private $db= "pdo_db"; 
     public $conn; 

     public function dbConnection() 
      { 
       $this->conn = null;  
       try { 
        $this->conn = new PDO("mysql:host=" . $this->host . ";db=" . $this->db, $this->user, $this->pass); 
        $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       } catch(PDOException $exception) { 
        echo "Connection error: " . $exception->getMessage(); 
       } 

       return $this->conn; 
      } 
    } 
?> 
+1

你究竟在哪裏設置了'$ conn'? - >'$ conn = new Database();' – Rasclatt

+0

實際上,它可能更像'$ db = new Database(); $ conn = $ db-> dbConnection();' – Rasclatt

回答

1

$康恩將不會被初始化,使用

$connectionClass = new Database(); 
$conn = $connectionClass->dbConnection(); 

這將設置$康恩... 另外你沒有綁定到任何值:UID,所以

$stmt->bindParam(':uid', SET UID VALUE HERE, GIVE TYPE HERE INT OR STRING); 
+0

它確實有幫助,但是,我遇到了問題(帶有消息'SQLSTATE [HY093]的未捕獲異常'PDOException':無效參數編號:綁定變量的數量與令牌數量不匹配'in),我只想更新只有9個不同領域的圖像領域。有什麼辦法,以便我只更新一個圖像(位置)字段? –

+0

它因爲你沒有綁定一個值:uid –

+0

添加uid,一切都會好:) $ stmt-> bindParam(':uid',ENTER UID VALUE,ENTER TYPE HERE); –

相關問題