php+mysql一次自动插入2条数据,求解?

代码

<?php
$con = mysqli_connect("127.0.0.1","xxx","xxx","xxx");
mysqli_query($con , "set names utf8"); 
$nowtime = date('Y-m-d H:i:s',time());

$sql = "insert into user (`name`, `ctime`, `mtime`) values ('kkk33','{$nowtime}','{$nowtime}')";
if(!mysqli_query($con,$sql)){
    die('Error: ' . mysqli_error($con));
}
echo "受影响的行数: " . mysqli_affected_rows($con);
echo '<br/>';
echo mysqli_insert_id($con);
mysqli_close($con);
?>

以上是全部代码,就一个PHP文件,没有表单,没有require
phpstudy 2018 php7.0.12+nginx
同文件放www目录,这样http://127.0.0.1/index.php 又没问题
www文件夹下demo文件夹里的index.php,本地域名访问 http://demo.cm/index.php
运行时同时插入了2条一样的数据,求解……

img


感觉像数据库的缓存,id是自增的,其他都是默认的,默认应该不会自动插入吧,在www根目录就没问题,在www文件里新建的文件夹demo,只有index.php,其他文件全部清除掉了,代码只有上面那些喔

【以下回答由 GPT 生成】

解决方案:

这个问题出现的原因是因为在将文件放在 demo 文件夹内,并通过本地域名访问时,会将文件作为目录索引文件来处理,从而导致文件被访问了两次。

要解决这个问题,我们可以在 www 目录下的 .htaccess 文件中添加以下 RewriteRule 规则来防止文件被访问两次:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]

这个规则的作用是,当访问的文件不存在时,将其重定向到 index.php 文件,从而只执行一次插入数据的操作。

另外,为了确保写入数据库的数据不会重复,我们可以给 name 字段设置为 UNIQUE 索引,从而避免重复插入相同的数据。

下面是修改后的代码:

<?php
$con = mysqli_connect("127.0.0.1","xxx","xxx","xxx");
mysqli_query($con , "set names utf8"); 
$nowtime = date('Y-m-d H:i:s',time());

$sql = "insert into user (`name`, `ctime`, `mtime`) values ('kkk33','{$nowtime}','{$nowtime}')";
if(!mysqli_query($con,$sql)){
    die('Error: ' . mysqli_error($con));
}
echo "受影响的行数: " . mysqli_affected_rows($con);
echo '<br/>';
echo mysqli_insert_id($con);
mysqli_close($con);
?>


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

根据你提供的代码,它只执行了一次插入操作,所以理论上不应该插入两条相同的数据。但是,你提到在运行时同时插入了两条一样的数据。这可能是因为在代码的某个地方有重复执行。

一个可能的原因是,你的代码可能被多次调用或执行。这可能是由于某种重定向、刷新或其他原因导致的。

你可以尝试以下几种方法来调试和解决这个问题:

  1. 在代码开始处添加一条唯一的日志记录,例如:
$log = "开始执行插入操作\n";
file_put_contents('log.txt', $log, FILE_APPEND);

然后,检查生成的日志文件,看看是否有两条相同的记录。
2. 在插入操作之前,检查是否已经有相同的数据存在于数据库中。如果有,你可以选择不执行插入操作。
3. 检查是否有其他代码或脚本可能在同一个请求中执行了相同的插入操作。
4. 使用开发者工具(例如Chrome的开发者工具)来检查网络请求是否被执行了多次。
5. 如果你的PHP代码文件位于一个可以被多次调用的位置(例如在一个循环或条件语句中),确保它只被执行一次。
6. 检查你的Web服务器配置,确保没有重复执行相同的请求。
7. 尝试在不同的浏览器或环境中运行代码,看看问题是否仍然存在。有时候,浏览器插件或缓存可能会导致一些奇怪的行为。
8. 在代码中使用sleep(1)来添加一秒钟的延迟,这样你可以观察是否确实插入了两条数据,或者是因为执行速度太快而看起来像是插入了两条数据。
9. 最后,确保你的数据库表结构没有设置任何触发器或自动插入规则。

希望这些建议能帮助你找到问题的根源并解决它。如果问题仍然存在,请提供更多信息,我会尽力帮助你进一步调试。