从带有php问题的sql表中删除行
根据所选的行,询问用户要删除的行 在选择列表中选择的值和包含 匹配的数据。例如,选定项='city'和文本框= “波士顿”。包括从表中删除行的按钮 这是我的指示。我有两个问题,第一个问题是如果我说。。选择teamname并从表中输入一个团队,我会收到一个错误,错误是:从带有php问题的sql表中删除行,php,Php,根据所选的行,询问用户要删除的行 在选择列表中选择的值和包含 匹配的数据。例如,选定项='city'和文本框= “波士顿”。包括从表中删除行的按钮 这是我的指示。我有两个问题,第一个问题是如果我说。。选择teamname并从表中输入一个团队,我会收到一个错误,错误是: DELETE FROM teams WHERE teamname = rockets 未找到列:“where子句”中的1054未知列“rockets” 它试图使用火箭作为列名,而不是需要删除的行。第二个问题是,如果我选择year
DELETE FROM teams WHERE teamname = rockets
未找到列:“where子句”中的1054未知列“rockets”
它试图使用火箭作为列名,而不是需要删除的行。第二个问题是,如果我选择yearformed并输入正确的年份,它将删除该年份的行。如果我输入了一个不存在的年份,我的代码会显示记录已成功删除,但没有实际删除的记录
我想我这里有些东西混在一起了,我不确定它到底是如何在一年中起作用的,而在其他专栏中却没有
html
<form method='post' action='phpfiles/deleteData.php'>
Select a column name, then enter which data to delete.
<br>
<br>
<label for='option1'>
<select name='selectColumn'>
<option value='teamname' id='team'>teamname</option>
<option value='city' id='city'>city</option>
<option value='bestplayer' id='best'>bestplayer</option>
<option value='yearformed' id='year'>year</option>
<option value='website' id='website'>website</option>
</select>
</label>
<label for='option2'>
Data to delete: <input type='text' name='dataDelete'>
</label>
<br><br>
<input type='submit' value='Submit Delete'>
</form>
选择列名,然后输入要删除的数据。
团队名称
城市
最佳选手
年
网站
要删除的数据:
php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$servername = "localhost";
$username = "root";
$password = "enigma";
$dbname = "program09";
$columnSelect = $_POST['selectColumn'];
$deleteData = $_POST['dataDelete'];
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 = "DELETE FROM teams WHERE $columnSelect = $deleteData";
// use exec() because no results are returned
$conn->exec($sql);
echo "Record deleted successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
}
?>
您需要单引号:
$sql = "DELETE FROM teams WHERE $columnSelect = '$deleteData'";
但最好使用准备好的语句来避免SQL注入。还可以为列名使用白名单
$sql = "DELETE FROM teams WHERE $columnSelect = :value1";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':value1'=>$deleteData));
你介意简单地解释一下准备好的声明中发生了什么吗?例如:value1代表什么?我看到您在将$deletedata变量放入数组后将其赋值(可能不是正确的单词)?谢谢,我想最好看看这里:很抱歉,我还有最后一个问题,如果我在文本框中输入一个不存在的字符串,它仍然保持记录删除状态,但什么都没有发生,我如何让它捕获错误消息或声明错误消息?如果($stmt->rowCount()>0){echo'deleted'。$stmt->rowCount()“'rows';}其他{echo'No rows deleted';}谢谢