2015-11-16 72 views
1

我想基於用戶輸入更新我的SQL表。因此,用戶從選擇列表中選擇他們想要更新的列。然後他們輸入行中的數據,然後輸入他們想要更新的數據。所以說選擇列隊名,然後輸入他們想要通過文本框更改的隊名,然後通過另一個文本框輸入新名稱。那就是我試圖發生的事情。基於用戶選擇使用PDO通過PHP更新特定的行問題

我試圖從用戶刪除數據並修改它的位置複製粘貼我的代碼。我已經嘗試了一些不同的東西,我想的第一件事就是給了我這個錯誤:

UPDATE teams SET rockets = :value1 WHERE teamname = rockets SQLSTATE[42S22]: Column not found: 1054 Unknown column 'rockets' in 'where clause'

我的SQL語句是這樣的:

$sql = "UPDATE teams SET $selectData = :value1 WHERE $columnSelect = $selectData"; 

於是,我試圖做這樣的事情:

下面

整個代碼,如所述的上述我已經嘗試了幾種不同的thigns與$sql變量:

PHP

<?php 

    if ($_SERVER["REQUEST_METHOD"] == "POST"){ 

     $servername = "localhost"; 
     $username = ""; 
     $password = ""; 
     $dbname = ""; 
     $columnSelect = $_POST['selectColumn2']; 
     $selectData = $_POST['selectData']; 
     $updateData = $_POST['updateData']; 

     try { 
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
      // set the PDO error mode to exception 
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      // sql to delete a record 
      $sql = "UPDATE teams SET :value1 = :value2 WHERE $columnSelect = :value1"; 

      // use exec() because no results are returned 
      $stmt = $conn->prepare($sql); 
      $stmt->execute(array(':value1'=>$selectData, ':value2'=>$updateData)); 
      if ($stmt->rowCount() > 0) { 
       echo 'Updated '.$stmt->rowCount().' rows'; 
      } else { 
       echo 'No rows updated'; 
       } 
     } 
     catch(PDOException $e) 
      { 
      echo $sql . "<br>" . $e->getMessage(); 
      } 

     $conn = null; 
    } 
?> 

HTML

 <form method='post' action='addData.php'> 
      Select a column name, then enter which data to update. 
      <br> 
      <br> 
      <label for='option2'> 
       <select name='selectColumn2'> 
        <option value='teamname' id='team2'>teamname</option> 
        <option value='city' id='city2'>city</option> 
        <option value='bestplayer' id='best2'>bestplayer</option> 
        <option value='yearformed' id='year2'>year</option> 
        <option value='website' id='website2'>website</option> 
       </select> 
      </label>  
      <label for='option2'> 
       select data to change: <input type='text' name='selectData'> 
       enter new data: <input type='text' name='updateData'> 
      </label> 
      <br><br> 
      <input type='submit' value='Submit New Entry'> 
     </form> 

基本上我是什麼做的是採取$columnSelect,發現該列$selectData和使用PDO法$updateData更換。我究竟做錯了什麼?

+0

列名和表名不能參數(據我所知)。當涉及到這些元素時,您必須找到一種不同的方式來過濾用戶輸入。 – Rasclatt

回答

0

更改您這樣的查詢,

$sql = "UPDATE teams SET `$selectData` = ':value1' WHERE `$columnSelect` = '$selectData'"; 

添加字符串值單引號,而插入或更新。併爲表名稱或列名稱添加備份。

編輯

$sql = "UPDATE teams SET `$columnSelect` = ':value1' WHERE `$columnSelect` = '$selectData'"; 
+0

我可能做錯了什麼,UPDATE球隊設置'火箭'=':值1'其中'隊名'='火箭隊' SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'火箭'.. ........我100%有數據'火箭隊'下列專欄隊名....因爲火箭隊不是列名只是我想​​更新的行應該我離開了backtics .... – gatsby2748

+0

你的表中有「火箭」的專欄名稱嗎? –

+0

不,我有一個名爲teamname的列,有4行,第一行是團隊/數據'火箭'.....所以列名是團隊名,我想更新的數據是'火箭'更新到遊俠。在這種情況下,列名將爲$ columnSelect,對於火箭隊爲$ selectData,對於護林員則爲$ updateData。我想根據您的查詢將'火箭'更新爲'隊員'欄'隊名 – gatsby2748

1

這應該工作:UPDATE teams SET $columnSelect = :value1 WHERE $columnSelect = $selectData