php - 使用 PHP 增加 MySQL 数据库的值(value)

标签 php mysql

我有这个功能,但它不能 100% 工作,我不确定为什么。目前我加载发票模板,它显示 0001。

如果我添加发票,它会被添加到数据库中,其含义是,如果最新行不等于 0001,则将其设为 0002,依此类推,如果是 1872,则将执行下一个数字来自 MySQL 中的最新发票。

PHP

define('INVOICE_INITIAL_VALUE','0001');    

// Connect to the database
        $mysqli = new mysqli(DATABASE_HOST, DATABASE_USER, DATABASE_PASS, DATABASE_NAME);

        // output any connection error
        if ($mysqli->connect_error) {
            die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
        }

        $query = "SELECT invoice FROM invoices ORDER BY invoice DESC LIMIT 1";

        // mysqli select query
        $result = $mysqli->query($query);

        // get number of returned results, if 0 action it below
        $row_cnt = $result->num_rows;

        //Invoice length
        $invoice = $row['invoice'];

        if($row_cnt == "0"){
            echo INVOICE_INITIAL_VALUE;
        } else {
            // check if the initial invoice ID has already been used and if not start from that value else from the next value
            if($invoice != INVOICE_INITIAL_VALUE) {
                echo ++$invoice;
            }
        }

        // Frees the memory associated with a result
        $result->free();

        // close connection 
        $mysqli->close();

更新如下:

if ($result = $mysqli->query($query)) {

        $row_cnt = $result->num_rows;

        /* fetch object array */
        while ($row = $result->fetch_row()) {
            $invoice = $row['invoice'];
        }

        if($row_cnt == "0"){
            echo INVOICE_INITIAL_VALUE;
        } else {
            // check if the initial invoice ID has already been used and if not start from that value else from the next value
            if($invoice != INVOICE_INITIAL_VALUE) {
                echo ++$invoice;
            }
        }

        // Frees the memory associated with a result
        $result->free();

        // close connection 
        $mysqli->close();
    }

最佳答案

正确的做法是将字符串转换为整数。然后用前导 0 将其转换回来。 就像下面的例子:

$num = '0001'; // string('0001')
$invoiceNumber = intval($num) + 1; // integer(2)
$invoice = str_pad($invoiceNumber, 4, '0', STR_PAD_LEFT); // string('0002')

所以你应该在代码中将其更改为:

else if($invoice != INVOICE_INITIAL_VALUE) {
    $num = intval($invoice) + 1;
    $invoice = str_pad($num, 4, '0', STR_PAD_LEFT);
    echo $invoice;
}

尽管您应该将数据保存为整数并仅以前导零表示。

关于php - 使用 PHP 增加 MySQL 数据库的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30100242/

相关文章:

php - 用json php mysqli查看标签表中的数据

php - Codeigniter DB 查询链接先前调用中的错误数据

mysql - 如何在redhat linux上运行mysql v5.5

MYSQL创建显示两个表中数据的 View

php - SQL命令从数据ID在两个表中的表中删除

php - SELECT PDO 准备语句中的 SELECT

php - 多对多加入php/mysql

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 无法使用临时表添加或更新子行错误?

mysql - 如何在MYSQL表中选择DISTINCT Name where Dealer_ID,防止重复记录