Несколько подготовленных запросов mysqli приводят к тому, что последние выполняются несколько раз - PullRequest
0 голосов
/ 07 ноября 2018

Итак, я сейчас работаю над проектом PHP и создал систему управления сеансами со встроенным MySQL вместо использования стандартных сессий PHP, поскольку с некоторыми функциями это становилось слишком громоздким. У меня есть функции пространства имен для управления обновлением и извлечением данных сеанса в базе данных. Проблема возникает, когда я вызываю оператор обновления несколько раз, и запрос выполняется каждый раз, но только со значениями, которые я передал в последнем вызове.

function update_session_var($x, $var_name, 
 $var_value)
{    
    $find_session_var =
        "SELECT * FROM session_data_table
         WHERE x=?
         AND dKey=?";
    $db_conn = //mysqli_connect object ;
    $stmt = $db_conn->prepare($find_session_var);
    $stmt->bind_param("ss", $x, $var_name);
    $stmt->execute();
    $stmt_var_result = $stmt->get_result();
    $stmt->close();
    $queryUse = "";
    if(mysqli_num_rows($stmt_var_result) < 1)
        $queryUse =
            "INSERT INTO session_data_table 
             (dKey, dV, x) 
             VALUES 
             (?, ?, ?)";
    else
        $queryUse =
            "UPDATE session_data_table 
             SET dKey=?,
             dV=?
             WHERE x=?
             ";
    $stmt = $db_conn->prepare($queryUse);
    $stmt->bind_param("sss", $var_name, $var_value, $x);
    $stmt->execute();
    $stmt->close();
}

и я вызываю функции последовательно, как

\namespace_path\update_session_var($x, "1st", "2nd");
\namespace_path\update_session_var($x, "3rd", "4th");

Но на самом деле происходит то, что я получаю две записи для второго вызова вместо одной для 1-го, 2-го и одну для 3-го, 4-го. До того, как звонки сделаны, я даже проверяю, существуют ли записи, и даже проходит эту проверку. Кроме того, если я помещу die () между двумя вызовами функций, первый будет работать так, как задумано. Это когда они вызваны последовательно, что создает проблемы.

Понятия не имею, почему это происходит. Помогите, кто-нибудь?

...