Как получить значения столбцов после вставки с помощью php mysql? - PullRequest
0 голосов
/ 08 октября 2018

В этом коде после вставки значений в БД. Я делаю запрос на выбор для выбора invoiceNo ($ sql1 = "select invoiceNo из порядка счетов-фактур по invoiceID desc limit 1";). Вместо выбора из БД как получить InvoiceNo?

Например: предположим, что есть два пользователя. Два пользователя вставляют InvoiceID одновременно. При выполнении «выберите invoiceNo из порядка счетов по invoiceID desc limit 1»; это будет последний пришедший invoiceID. Мне нужно получитьконкретный invoiceID (для конкретного пользователя). Как его получить?

$query          = "select * from invoices order by invoiceID desc limit 1";
$result         = $link->query($query);
$row            = $result->fetch_assoc();
$invoiceNo      = $row["invoiceNo"];
$getinvoiceNo   = str_pad($invoiceNo + 1, 4, 0, STR_PAD_LEFT); //inserting like 0000
$sql            = "INSERT INTO invoices (invoiceNo)
                   VALUES ('$getinvoiceNo')";
if ($link->query($sql) === TRUE) {
   //echo "1";
   $sql1    = "select invoiceNo from invoices order by invoiceID desc limit 1";
   $last_id = mysqli_insert_id($link, $sql1);
   $result1 = mysqli_query($link, $sql1);
   $row1    = mysqli_fetch_array($result1);
   echo json_encode($row1);
} else {
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
mysql_close($link);

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Если вы хотите предотвратить коллизии в номерах счетов, все, что вам нужно сделать, это создать свою таблицу как

CREATE TABLE invoices (
     invoiceID INTEGER NOT NULL AUTO_INCREMENT,
     other columns . . .
     PRIMARY KEY (invoiceID)
);

Тогда, когда вы делаете INSERT, не вставляйте invoiceID и не позволяйте MySQLсделайте это.

Это обеспечит уникальный счет-фактуру каждого нового счета.

0 голосов
/ 08 октября 2018

Если я правильно понимаю ваш вопрос, вы обеспокоены возможным повреждением данных из-за одновременного обновления записи.

Я думаю, вам следует взглянуть на mysql SELECT ... FOR UPDATE синтаксис, он должен делать то, что вы просите: блокировать выбранную строку, пока не будет запущено обновление.Тогда блокировка будет снята.

Например:

SELECT table_field FROM table_name WHERE table_id_field = id_param FOR UPDATE

будет блокировать выбранную строку до

UPDATE table_name SET table_field = table_field + 1 WHERE table_id_field = id_param
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...