我一定在这里做的很愚蠢。我已经解决了 3 天的问题,但没有运气。
这是发送到 mysql_query() 的 PHP 字符串:
insert into post_replies (postID, fromID, toID, status) values ($id, $userID, $toID, ".g_unread.")
在你说“啊哈哈,SQL肯定有错误”之前,请注意以下两点:
- mysql_query() 返回真 (1)
- 我在发送到 mysql_query() 之前将字符串导出到文本文件(见下文) - 如果我将导出的文本粘贴到相同的 mysql_query() 语句中,它工作正常(出现新行) - 如果将导出的文本粘贴到 phpMyAdmin,它工作正常(出现新行)
- 精确的(我的意思是精确的,因为我只是复制并粘贴它)相同的查询被使用了几行,它总是工作正常
我尝试的另一件事是从文本中加载查询,然后将其发送到 mysql_query() - 但这会产生相同的奇怪行为 - 它返回成功 (1),但实际上没有插入新行。
我已经向另一个抱怨我的 PHP 编码风格的程序员展示了这个。他说 INT 应该包装成字符串,我应该在它们周围使用花括号(例如'{$id}')。但是,当然这并没有解决任何问题,行为完全相同。如果字符串生成有问题,那么问题将出现在导出到文本文件的查询中,然后再发送到 mysql_query()。他还抱怨我使用过时的 mysql 函数(我应该使用 mysqli 函数)。但是,这并不能解释为什么我通过 mysql_query() 发送的数百个其他查询可以正常工作,包括该查询下方几行的查询。如果我将导出到文本文件的文本直接粘贴到 mysql_query() 中,它没有解释为什么查询工作正常。
非常感谢。我完全迷失在这里。
更新#1:根据要求,这里是语句周围的代码:
$q = "insert into post_replies (postID, fromID, toID, status) values ($id, $userID, $toID, ".g_unread.")";
$result = mysql_query($q);
if ($result == true) {
z($q);
} else {
z('failure');
}
z() 是我用来轻松导出到文本文件的函数。顺便说一句,查询总是发送到 z(),永远不会发送“失败”。
以下是发送到文本文件的示例:
insert into post_replies (postID, fromID, toID, status) values (2039, 8, 1, 1)
请记住,如果我将该文本粘贴到 phpMyAdmin 或上面的 mysql_query() 函数中,则会插入该行。
更新#2:由于一些人的关注,我更新了这部分代码以使用 mysql[i]
$mysqli = new mysqli(g_db_server, g_db_user, g_db_pass, g_db);
$result = $mysqli->query($q);
我现在建立一个单独的连接,只针对这个单一的查询。但是,行为完全相同。它返回 true,但不创建新闻行。但是,如果我将 $q 导出到一个文本文件,然后将该文本粘贴到上面的 $mysqli->query() 中,它可以正常工作并且新行会按预期创建。
由于每个人似乎都放弃了,我现在正在努力将问题隔离到单个 MySQL 表/PHP 文件,任何人都可以下载并自己尝试。
更新#3:解决了!有点。似乎是周围代码的问题,导致插入后删除了行。但是,这仍然不能解释为什么 mysql_insert_id() 返回 0。也许 mysql_insert_id() 在复合键上中断。无论如何,我不在乎 - 因为它是固定的。我会把支票交给@user1231958,因为他的答案是最接近的。非常感谢大家的帮助,很抱歉被 mysql_insert_id() 欺骗了