有重复时只删除一行

时间:2011-10-07 22:38:46

标签: php mysql

关于这一行

  database::query("DELETE FROM bo WHERE name='{$this->_protected_arr[a1]}' AND email='$_SESSION[email]'");

如何更新它以便它只删除一行而不是所有行。

此外,语法看起来没有,有没有办法不使用{}。

此外,通常PHP调用警告,如果在关联数组中没有副本,但在这种情况下它不会拾取它。所以这似乎也是错误的。

所以这实际上是3个问题。

4 个答案:

答案 0 :(得分:3)

  

如何更新它以便它只删除一行而不是所有行。

在查询结尾处使用LIMIT 1子句。

  

语法关闭

这是对的。这就是PHP所谓的“复杂(卷曲)语法”,用于字符串中的变量解析:

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

如果您愿意,您当然可以在那里使用字符串连接。

答案 1 :(得分:0)

您应该使用LIMIT 1。问题是LIMIT 1选择中将捕获哪一行:)

最好的情况是 database :: query 支持占位符。

关于花括号,只需将撇号添加到数组键

即可
   database::query("DELETE FROM bo WHERE name='{$this->_protected_arr['a1']}' AND email='{$_SESSION['email']}'");

如果你不想使用卷曲的brakets,那么只需连接像"DELETE ...".$this->property." AND ..."这样的字符串。

答案 2 :(得分:0)

database::query("DELETE FROM bo WHERE name='{$this->_protected_arr[a1]}' AND email='$_SESSION[email]' LIMIT 1");

答案 3 :(得分:0)

正如其他人所建议的那样,在查询结尾添加LIMIT 1会使其只删除一行。但是,鉴于你在这里使用静态类,我猜你已经足够了解为什么数据库中的所有内容都应该有自己的唯一标识符,我很好奇为什么你不使用它作为你的标准的一部分来确定你删除了什么?或者至少应该进行一些其他比较,比如运行一个select语句来拉取所有行,然后遍历结果,将它们设置为多维数组,然后可以比较多行的列值并使用比较以决定保留哪一行。如果您获得多个条目,可以考虑阻止用户双击,使用jquery隐藏按钮或在单击时将其灰显。只是一些想法...