Php mysqli更新行时出现奇怪的MySQL重复记录
我在通过mysqli(php)更新表时遇到了奇怪的行为。我有一个简单的记录表:Php mysqli更新行时出现奇怪的MySQL重复记录,php,mysql,mysqli,Php,Mysql,Mysqli,我在通过mysqli(php)更新表时遇到了奇怪的行为。我有一个简单的记录表: mysql> describe reports_1; +-------------+------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Ex
mysql> describe reports_1;
+-------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+-------------------+-----------------------------+
| line_number | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(30) | YES | | NULL | |
| id | int(10) unsigned | YES | | NULL | |
| stamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| content | varchar(1000) | YES | | NULL | |
+-------------+------------------+------+-----+-------------------+-----------------------------+
行号是主键(id是外键)。在CLI中更新此表时,一切正常:
mysql> update reports_1 set content='works fine' where line_number='24';
Query OK, 1 row affected (0.00 sec)
然而,当我在php中执行完全相同的查询时,即
$q = "update reports_1 set content='works fine' where line_number='24'";
$update = $connection->query($q);
我的表中有一个双重(!)更新:
mysql> select * from reports_1;
+-------------+----------+------+---------------------+------------+
| line_number | username | id | stamp | content |
...
| 24 | user | 210 | 2016-02-04 11:56:14 | works fine |
| 25 | user | 0 | 2016-02-04 11:56:14 | works fine |
+-------------+----------+------+---------------------+------------+
可以看到,非常出乎意料的是(对我来说)更新被复制,给定了一个自己的新密钥,时间戳是相同的,外键被设置为零
我不知道这是什么原因!有没有人能解释一下这种行为?这是预期的吗?我错过什么了吗
提前谢谢你的帮助
根据要求进行编辑
php脚本接收从js函数发送的数据,该函数取textarea字段的值:
if (isset($_POST['line_number']))
{
$line_nr = $_POST['line_number'];
$update = $_POST['record'];
$q15 = "update reports_1 set content='$update' where line_number=$line_nr";
$edit = $connection2->query($q15);
if (!$edit) die ("Database access failed: " . $connection2->error);
}
这就是它的全部…尝试删除单引号。使用24而不是“24”。只是一个猜测,因为它们的类型(整数和字符串)行数是主要的,并且存在两次?没有行数不是两次。是24和25@goudelalfy。您确定在php代码上插入后没有完成吗?你能在if的决赛上放一个出口(0)吗,只是为了确保之后没有人发生?另外,您是否已经尝试使用该查询
$q15=“更新报告”set content='works fine'where line_number='24'你提到的代码>吗?或者您只使用该变量注入进行了测试?如果您的查询方法执行mysqli\u multi\u查询,那么在没有触发器的情况下,我可以看到这将执行插入操作的唯一方法是使用SQL注入。我同意@anolsi-使用exit终止脚本并查看已更新/插入的内容(尽管如果在更新之前有插入,则不会识别问题)。