php mysql, как использовать mysql_insert_id(), чтобы иметь возможность вставлять в 2 таблицы одновременно?

Я использую php с базой данных mysql для вставки. У меня 2 стола.

  • пользователь
  • статус, где вторая таблица имеет в качестве внешнего ключа user_id для связи между этими двумя таблицами

моя проблема в том, что когда я вставляю в таблицу состояния, поле user_id меняется и принимает 0 независимо от того, что такое user_id.

так как решить эту проблему???

это код login.php

<?php
//array for JSON response
$response = array();

// check for required fields
if(empty($_POST['user']) || empty($_POST['password'])){
       $response["success"] = 0;
       $response["message"] = "enter Both Fields";
        // echoing JSON response
        die (json_encode($response));


}

else if (isset($_POST['user']) && isset($_POST['password']) ) {

    $user = $_POST['user'];
    $password = $_POST['password'];


    // include db connect class
    require_once '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();

    // mysql inserting a new row
    $sql = mysql_query("Select user, password from users where user='$user'")or die(mysql_error());
    $count_query = mysql_num_rows($sql);
    if($count_query >0){
     $response["success"] = 1;
        $response["message"] = "correct Informations";

   // echoing JSON response
        echo json_encode($response);
    }
     else{
        $response["success"] = 0;
        $response["message"] = "Wrong User Or Pass";

        // echoing JSON response
        echo json_encode($response);
    }
}
else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}   
?>

статус.php

<?php

/*
 * Following code will create a new product row
 * All product details are read from HTTP Post Request
 */

// array for JSON response
$response = array();
if(empty($_POST['status'])){
       $response["success"] = 0;
       $response["message"] = "You must Write something";
        // echoing JSON response
        die (json_encode($response));
}

// check for required fields
else if (isset($_POST['status'])) {

    $status = $_POST['status'];

    // include db connect class
    require_once __DIR__ . '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();



    // mysql inserting a new row
    $result = mysql_query("INSERT INTO status(status, user_id) VALUES('$status' , '$last_insert_id')") or die(mysql_error);
    $last_insert_id = mysql_insert_id();

    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "Your Status has been saved.";

        // echoing JSON response
        die (json_encode($response));
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        die (json_encode($response));
    }

}

?>

Я использую php с Android, поэтому это не html-форма


person user3499032    schedule 04.04.2014    source источник
comment
ваш '$ last_insert_id' не установлен ни на что до вызова mysql_query()?   -  person Reinder Wit    schedule 04.04.2014
comment
так как решить эту проблему и добавить значение поля user_id в базу данных???   -  person user3499032    schedule 04.04.2014
comment
если речь идет о входе в систему, вы можете поместить идентификатор пользователя в файл cookie, чтобы использовать его в любом месте своего приложения.   -  person Reinder Wit    schedule 04.04.2014
comment
как поместить идентификатор пользователя в файл cookie и использовать его в Android??   -  person user3499032    schedule 04.04.2014
comment
Я не знаком с запуском PHP в Android, но я думаю, вы сможете создать какой-то сеанс, как сказал @Marc B в своем ответе. Вот что я имел в виду под использованием файла cookie.   -  person Reinder Wit    schedule 04.04.2014


Ответы (1)


Вы не можете. mysql_insert_id() применяется только к выполненной ПОСЛЕДНЕЙ вставке. Если вы делаете две вставки и вызываете insert_id() после второй, первый идентификатор теряется.

Обойти это невозможно.

У вас должно быть что-то вроде:

INSERT INTO foo ....
$fooid = mysql_insert_id();
INSERT INTO bar .... foo_id=$fooid
$barid = mysql_insert_id();

Учитывая, что ваш код на самом деле кажется разбитым на несколько страниц, это еще хуже. mysql_insert_id() применяется только к ТЕКУЩЕМУ соединению с базой данных. Как только ваш первый скрипт завершает работу, соединение закрывается, а insert_id теряется.

Следующий скрипт получит НОВОЕ соединение и будет иметь свою собственную, полностью отдельную систему insert_id.

Для объединения нескольких страниц вместе, как это, вам нужно будет получить/передать идентификатор вставки вокруг себя, например.

Страница 1:

INSERT ...
$_SESSION['page1_id'] = mysql_insert_id();

страница 2:

$last_id = $_SESSION['page1_id'];
INSERT ..... id=$last_id
person Marc B    schedule 04.04.2014
comment
так что вы говорите, что я должен создать $_SESSION в файле php на первой странице, чем получить этот сеанс в качестве внешнего ключа во второй таблице, которая используется на второй странице ?? - person user3499032; 04.04.2014
comment
Первый ID теряется только при выполнении 2-х запросов. Если вы делаете массовую вставку `values ​​(...), (...)', вы можете рассчитать следующий идентификатор, добавив +1 к идентификатору, который будет идентификатором первой записи массовой вставки. - person Mateusz Nowak; 30.06.2014