作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个查询,每次遇到它都会运行两次,这不是预期的。我在文件前后添加了日志记录,并在运行脚本之前清除了文件。
我认为我不需要发布其他代码,因为我相信我的日志记录证明此查询仅被调用一次。
代码:
file_put_contents(
$_SERVER['DOCUMENT_ROOT'].'/PDOErrors.txt',
"\n\nImmediately before ban query 1. ".date('r ')." (1)",
FILE_APPEND);
$sth=$Mdbh->query("
INSERT INTO
banned_IP
SET
ip_add = '$ip',
proxy_ip = '$proxy_ip'
");
$sth->execute();
file_put_contents(
$_SERVER['DOCUMENT_ROOT'].'/PDOErrors.txt',
"\n\nBanned the user using query1. ".date('r ')." (2)",
FILE_APPEND);
return 999;
请注意,在它运行后也会立即返回一个return
,即使它被调用两次,我的PDOErrors.txt
文件也会显示每次运行的诊断数据,它没有。
PDOErrors.txt
中的第一个诊断数据运行,但第二个诊断数据永远不会运行!
这是 PDOErrors.txt 的副本
Immediately before ban query 1. Thu, 21 Mar 2013 13:38:56 +0800 (1)
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '127.0.0.1' for key 'ip_add'' in /home/peter/Documents/websites/Our_websites/bookkeeper/books.bookkeeper/public/includes/classes/loginAttempt.class.php:137
Stack trace:
#0 /home/peter/Documents/websites/Our_websites/bookkeeper/books.bookkeeper.ph/public/includes/classes/loginAttempt.class.php(137): PDOStatement->execute()
#1 /home/peter/Documents/websites/Our_websites/bookkeeper/books.bookkeeper.ph/public/includes/classes/login.class.php(980): loginAttempt->recordLoginAttempt(Array)
#2 /home/peter/Documents/websites/Our_websites/bookkeeper/books.bookkeeper.ph/public/ajax/login.user.php(25): Login->doLogin(Array)
#3 {main}
我应该提一下,我在每次运行前完全清空了 banned_IP
数据库表。
我还记录了所有查询,因为这是一个开发环境,查询日志如下所示:
708 Query INSERT INTO
banned_IP
SET
ip_add = '127.0.0.1',
proxy_ip = ''
708 Query INSERT INTO
banned_IP
SET
ip_add = '127.0.0.1',
proxy_ip = ''
708 Quit
我想我对查询只被调用一次感到满意,因为如果没有,PDOErrors.txt 将包含两组诊断数据。错误消息似乎是在空数据库表上第一次运行查询时生成的。请问这是什么原因造成的?
最佳答案
PDO->query 将执行查询并返回 PDOStatement 对象,现在您再次执行返回的 PDOStatement 导致此错误。
使用返回 PDOStatement 对象的 PDO->prepare 然后执行语句或者只使用 PDO->query 并且不执行 PDOStatement
关于php - INSERT INTO 调用一次但运行两次(不在循环中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15540577/
我是一名优秀的程序员,十分优秀!