【问题标题】:PHP PDO can't delete recordPHP PDO 无法删除记录
【发布时间】:2015-03-12 18:00:04
【问题描述】:

我在使用 PDO 从数据库中删除记录时遇到了一点问题。

它只是返回 false,我似乎不明白为什么,有人可以帮忙吗? 代码:

$db = new PDO('sqlsrv:Server='.DB_HOST.';Database='.DB_NAME, DB_USER, DB_PASS);
$query = $db->prepare('DELETE * FROM '.$table.' WHERE id = :id');
$query->bindValue(':id', $id);
$query->execute();

我也试过了:

$db = new PDO('sqlsrv:Server='.DB_HOST.';Database='.DB_NAME, DB_USER, DB_PASS);
$db->exec('DELETE * FROM '.$table.' WHERE id = '.$id);

我知道数据库中的用户有权删除,因为我可以在 SQL 客户端中成功运行查询。

有什么想法吗?

谢谢:)

【问题讨论】:

  • 我很好奇你是如何得到这个$table var。这可能是一个安全漏洞。
  • @brewal 我也是这么想的——希望他至少能把它包裹在mysqli_real_escape_string
  • 我想我会将数组中的一些表名列入白名单,然后使用in_array() 函数对其进行测试。
  • $table 和 $id 是我传递的,而不是用户传递的。这属于我正在创建的一个简单的 CRUD 类,我刚刚发布了相关部分。
  • 好吧,以防万一;)

标签: php pdo


【解决方案1】:
DELETE FROM $table WHERE id = $id
  • DELETE 语句中没有 *

去这里找些简单的documentation

【讨论】:

  • 您可能想链接到一些更可靠的文档,w3schools 只是错误地正确。
  • 它很容易开始。我尽量不给刚刚开始使用数据库冒险的 ppl 提供非常复杂的答案链接。我认为这会很糟糕。首先让他们了解基础知识,然后他们会尝试以更高的要求获得更多的知识。
【解决方案2】:

你的第一个例子很好,除了一个错误

$db = new PDO('sqlsrv:Server='.DB_HOST.';Database='.DB_NAME, DB_USER, DB_PASS);
$query = $db->prepare('DELETE FROM '.$table.' WHERE id = :id');
$query->bindValue(':id', $id);
$query->execute();

在简单的删除语句中不需要 *。

仅供参考,rowCount() 可以很好地确认删除工作,如下所示:

$countDel = $query->rowCount();
if ($countDel == 0) {
echo "No rows deleted";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多