【发布时间】:2015-11-16 12:09:43
【问题描述】:
我正在尝试根据用户输入更新我的 sql 表。因此,用户从选择列表中选择他们想要更新的列。然后他们输入行中的数据,然后输入他们想要更新的数据。所以说选择列团队名称,然后将通过文本框输入他们想要更改的团队名称,然后通过另一个文本框输入新名称。无论如何,这就是我想要实现的目标。
我尝试从用户删除数据的位置复制并粘贴我的代码并对其进行修改。我尝试了一些不同的东西,我尝试的第一件事给了我这个错误:
更新团队 SET Rockets = :value1 WHERE teamname = rockets SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'rockets'
我的 sql 语句如下所示:
$sql = "UPDATE teams SET $selectData = :value1 WHERE $columnSelect = $selectData";
然后,我尝试做这样的事情:
下面的整个代码,如上所述,我用$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。我做错了什么?
【问题讨论】:
-
列名和表名不能参数化(据我所知)。当涉及到这些元素时,您必须找到一种不同的方法来过滤用户输入。
标签: php