【问题标题】:SQL Query to Delete in PHP在 PHP 中删除的 SQL 查询
【发布时间】:2017-10-10 00:33:43
【问题描述】:

我有以下代码,但未能删除记录,我想我可能遗漏了一些东西。

<?php

//Open Database
class MyDB extends SQLite3
{
     function __construct() {
         $this->open('Name.db');
     }
}

$db = new MyDB();

if(!$db){
  echo $db->lastErrorMsg();
} 



//Select the Name Table
$sql =<<<EOF
    SELECT * FROM Name;
EOF;
$ret = $db->query($sql);

// Display The Data In a Table
echo "<table border='1' cellpadding='10'>";
echo "<tr><th>First name</th> <th>Last Name</th> <th>Gender</th> <th></th> 
<th></th></tr>";
while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
    echo "<tr>";
    echo '<td>' . $row['FirstName'] . '</td>';
    echo '<td>' . $row['LastName'] . '</td>';
    echo '<td>' . $row['Gender'] . '</td>';
    echo '<td><a href="name.php?id=' . $row['FirstName'] . '">Delete</a>
    </td>';
echo "</tr>";
}


// check for id to be set and if it is delete the matching row from database 

if (isset($_GET['id']))
{

// puts the id value in the variable
$id = $_GET['id'];

// delete the entry

$db->exec("Delete FROM Name WHERE VALUES TeamName=$id;");

header("Location: name.php");

} else {
header("Location: name.php");}

$db->close();
?>

我是否缺少某些东西,因为它仍然不会从 db 文件中删除整行。显示完美的表只是未能删除匹配的 id 记录。

我尝试过的其他删除查询是

$db->exec("Delete FROM Name (FirstName, LastName, Gender) WHERE VALUES 
FirstName=$id;");

【问题讨论】:

  • 警告:这有一些严重的SQL injection bugs,因为在查询中使用了用户数据。尽可能使用准备好的语句。在mysqliPDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?:name 指示符指定,稍后使用bind_paramexecute 填充,具体取决于您是哪个使用。 切勿$_POST$_GET 或任何用户数据直接放在您的查询中。
  • 不能删除列值,只能删除整行。请参阅how DELETE works 上的手册。随意拼凑语法并不是学习 MySQL 的有效方法。

标签: php mysql sql sqlite


【解决方案1】:

您不能删除某些值,您可以更新它们或只删除整行。

【讨论】:

    【解决方案2】:

    试试

    $db->exec("DELETE FROM Name WHERE TeamName=$id;");
    

    为了安全起见,您需要做的另一件事是escape $id 变量,否则等待发生会很麻烦。

    【讨论】:

      【解决方案3】:

      1) 检查你使用的用户是否有删除权限。

      2)$db->e​​xec("DELETE FROM Name WHERE TeamName = '".$id."'");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多