私はここで本当に愚かなことをしているに違いありません。私はこれを 3 日間トラブルシューティングしてきましたが、うまくいきませんでした。
mysql_query() に送信される PHP 文字列は次のとおりです。
insert into post_replies (postID, fromID, toID, status) values ($id, $userID, $toID, ".g_unread.")
「ああ、SQL にエラーがあるに違いない」と言う前に、次の 2 つの点に注意してください。
- mysql_query() は true (1) を返します
- 文字列をテキスト ファイルにエクスポートします (以下を参照)。正常に動作します(新しい行が表示されます)
- 正確な(つまり、単にコピーして貼り付けたので、正確な)同じクエリが数行下で使用され、常に正常に動作します
私が試したもう1つのことは、テキストからクエリをロードしてからmysql_query()に送信することでした-しかし、それは同じ奇妙な動作を生成します-成功(1)を返しますが、実際には新しい行は挿入されません.
これを別のプログラマーに見せたところ、私の PHP コーディング スタイルに不満を持っていました。彼は、INT は文字列としてラップする必要があり、それらを中括弧で囲む必要があると述べました (例: '{$id}')。しかし、もちろんそれは何も修正せず、動作はまったく同じでした。文字列の生成に問題があった場合、mysql_query() に送信する前にテキスト ファイルにエクスポートされるクエリに問題が発生します。彼はまた、私が時代遅れの mysql 関数を使用していると不満を漏らしました (mysqli 関数を使用する必要があります)。ただし、これでは、mysql_query() 経由で送信された数百の他のクエリが正常に機能する理由が説明されません。これには、この数行下のクエリも含まれます。export-to-text-file テキストを 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() にだまされて申し訳ありません。