Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从带有php问题的sql表中删除行_Php - Fatal编程技术网

从带有php问题的sql表中删除行

从带有php问题的sql表中删除行,php,Php,根据所选的行,询问用户要删除的行 在选择列表中选择的值和包含 匹配的数据。例如,选定项='city'和文本框= “波士顿”。包括从表中删除行的按钮 这是我的指示。我有两个问题,第一个问题是如果我说。。选择teamname并从表中输入一个团队,我会收到一个错误,错误是: DELETE FROM teams WHERE teamname = rockets 未找到列:“where子句”中的1054未知列“rockets” 它试图使用火箭作为列名,而不是需要删除的行。第二个问题是,如果我选择year

根据所选的行,询问用户要删除的行 在选择列表中选择的值和包含 匹配的数据。例如,选定项='city'和文本框= “波士顿”。包括从表中删除行的按钮

这是我的指示。我有两个问题,第一个问题是如果我说。。选择teamname并从表中输入一个团队,我会收到一个错误,错误是:

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';}谢谢