【发布时间】:2017-08-30 12:54:04
【问题描述】:
我有一个任务。我必须在 mysql 表中插入几列。
insert into `alreadysent` VALUES (NULL,'".$mobile_number."','".$user."','".$sender."','".date('Y-m-d H:i:s')."');
如果相同的mobile_number被插入10次,它应该接受。但它不应该在第 10 次插入该 mobile_number 后接受。
如果计数小于 10,我会很容易地使用 select 语句并插入。但在这个场景中我不能这样做。所以检查其他一些最佳选项。如果我们将列声明为唯一,我们可以停止插入重复条目,类似地,在 n 次插入后有什么可以给出异常的吗?谢谢!
【问题讨论】:
-
那是业务逻辑,不应该在SQL查询中。把它放到你的 php 代码中
-
了解prepared Statements以防止SQL注入
-
为什么插入前不能SELECT和计数?
-
"但是我不能在这个场景中做。"为什么不?就像你说的那样,将它全部包装在一个事务中并在每次插入之前检查计数。那有什么问题?真的没有其他方法可以做到这一点。也许触发器会起作用,这是我能想到的唯一其他事情。
-
你必须在某个地方使用一个,无论是在 PHP 中还是在触发器中,无论哪种方式你都需要一个 SELECT。您如何确定表格的当前内容?如果您的老板坚持您不能使用 SELECT,请让他们研究适当的解决方案,因为他们想要施加明显武断且不可行的限制。如果他们真的那么担心负载,那么在单个表上进行选择并不是什么大问题,假设它已正确索引。几乎可以肯定有更高效的方法来优化数据库和应用程序。
标签: php mysql sql-insert