1

のような関数と呼ばれる:-

$setmessage = setlatestmessage($sessionid, $sendersuserid, $message1);

関数は私がこのファイルに含めたファイルfunctions.phpにあります関数は:-

function setlatestmessage($sessionid, $userid, $message, $status = 0) {
    $dbc = mysqli_connect(hostname, username, password, database)
            or die("Error connecting database");

    // there was no row, so just add a row
    $query2 = "insert into table(session_id, user_id, message, status) values ( $sessionid, $userid, '$message', $status)";
    mysqli_query($dbc, $query2);

    // if a row was affected, close connection and send true
    if (mysqli_affected_rows($dbc) == 1) {
        mysqli_close($dbc);
        return TRUE;
    }
    mysqli_close($dbc);
    return FALSE;
}

この関数を呼び出した直後、スクリプトは次のようになります。

if (!$setmessage) {
                echo '<status>0</status>';
            } else {
                // fetch id of the row just inserted
                $query2 = "select id from game_messages where session_id = $sessionid and message = '$message1' and user_id = $sendersuserid order by datetime desc limit 1";
                $result2 = mysqli_query($dbc, $query2);

                if (mysqli_num_rows($result2) == 0) {
                    // if no row was returned
                    // case never should happen
                    echo '<status>10</status>';
                }
                else{echo'done';}

私が得る出力は10です。

ただし、関数呼び出しの下にsleep(50)を配置するか、関数呼び出しの代わりに関数が実行していることをコーディングするだけで、正しい出力が得られます。なぜこれが起こっているのか理解できません。

4

1 に答える 1

0

setlatestmessage()関数内の最後の挿入クエリで生成されたIDをmysqli_insert_id()、エラーの場合はfalseを使用して返すと、はるかに簡単で簡単になります。次に、次のことを確認します。

$messageID = setlatestmessage($sessionid, $sendersuserid, $message1);

if ($messageID !== false)
{
    echo '<status>0</status>';
}
else
{
    echo '<status>10</status>';
}
于 2012-06-22T08:37:44.143 に答える