【问题标题】:Data not deleting from database数据未从数据库中删除
【发布时间】:2013-05-28 08:58:28
【问题描述】:

我正在尝试从我的数据库中删除一行,但它似乎没有被删除。有什么建议为什么数据库没有更新?代码如下:

<form method="get">

<table>
    <tr><td>Email Address </td>
    <td><input name="e" type="text" size="25"></td>
    </tr>
</table>

<input name="delete" type="submit" value="Remove"/>

</form>

<?php
    if (isset($_GET['delete'])) {
        $query = oci_parse($conn,'DELETE FROM tbl WHERE email = :e');
        oci_bind_by_name($query, ':e', $_GET['e']);
        oci_execute($query);
    }
?>

【问题讨论】:

  • 检查受影响的行数,并尝试trim() GET 变量。
  • 你检查过它是否返回错误吗?
  • 我在代码中没有看到commit
  • Web 浏览器的错误控制台中没有错误。我打印了查询,它显示 $query = "Resource id #4" 不知道为什么会这样?我在最后添加了 oci_close($conn) ,但我相信 oracle 不需要提交。对吗?
  • 还在表单标签中添加了 action = "page.php"。我不确定这是否有什么不同。

标签: php sql oracle


【解决方案1】:

改变这个:

'DELETE FROM tbl WHERE email = :e'

'DELETE FROM tbl WHERE email = ":e"'

【讨论】:

  • 我不知道绑定函数是如何处理该字符串的,但使用 "DELETE FROM tbl WHERE email = ':e'" 可能是一个更好的主意,因为 imo 双引号是为标识符保留的。
  • 即使 :e 被替换,这也会导致错误,因为例如"foo@bar.com" 将是 列引用 而不是字符串值。正如 misapink 指出的那样,双引号用于标识符,单引号用于标准 SQL 中的字符串文字(并且 Oracle 符合标准)
  • @Sandra:;它不可能与双引号一起使用。这是一个完全错误的答案,我不明白为什么它被赞成。
【解决方案2】:

根据文档,绑定变量不需要用引号括起来:docs

可能发生的情况:您尝试匹配的字符串与数据库中的字符串略有不同。像“example@example.com”与“EXAMPLE@EXAMPLE.COM”之类的东西,一个领先的空间。按照您实现删除的方式,两个字符串必须完全相等才能进行删除。

我建议你试试这样的:
DELETE FROM tbl WHERE trim(upper(email)) = tirm(upper(:e))

或者,确保您的表中的所有电子邮件列都正确存储并仅在绑定变量部分使用该函数:
DELETE FROM tbl WHERE email = trim(upper(:e))

【讨论】:

    【解决方案3】:

    如前所述:

    <form method="get">
    
    <table>
        <tr><td>Email Address </td>
        <td><input name="e" type="text" size="25"></td>
        </tr>
    </table>
    
    <input name="delete" type="submit" value="Remove"/>
    
    </form>
    
    <?php
        if (isset($_GET['delete'])) {
            $query = oci_parse($conn,"DELETE FROM tbl WHERE upper(email) = trim(upper(':e'))");
            oci_bind_by_name($query, ':e', $_GET['e']);
            oci_execute($query);
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2015-08-03
      • 2018-06-19
      相关资源
      最近更新 更多