在varchar字段中丢失前导0

时间:2017-08-28 20:45:22

标签: php mysql

我有一个脚本从MySQL数据库单元格中的varchar字段获取数据,如果满足某些条件,则将其添加到另一个。

然而,当数据是一个低于10的数字时,它在原始字段中标有前导零(例如08),它将它保存到新单元中作为" 8",导致我所有进一步的问题。

我知道选择数字的查询会保持前导零 - 当我运行时会出现这种情况:

        $query = "INSERT INTO gpvwc_DBSW.engine_allocation SET
        team_id=".$team_id.",
        car=2,
        event=".$nextEvent.",
        engine=".$previousengine2.",
        driver=".$Car2nr.";
        ";

带数字的变量是"。$ Car2nr。&#34 ;;我知道接收单元支持前导零,因为其他查询导致它没有问题,但它已经两年了,这真的是我的头脑。感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

driver=".($Car2nr<10 ? str_pad($Car2nr, 2, "0", STR_PAD_LEFT) :$Car2nr) .",

答案 1 :(得分:1)

您可以使用PHP的str_pad函数: http://php.net/manual/en/function.str-pad.php

示例:

$Car2nr = str_pad($Car2nr, 2, '0', STR_PAD_LEFT);

这可以保证在低于10之前总是有0。

答案 2 :(得分:0)

使用PDO。如果您没有使用类似于教条的ORM或者使用PHP框架打包的ORM,那么您应该使用PDO。

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password');
$stmt = $db->prepare("
        INSERT INTO gpvwc_DBSW.engine_allocation SET
        team_id=:team_id,
        car=2,
        event=:nextEvent,
        engine=:previousengine2,
        driver=:Car2nr;
");
$stmt->execute(
    array(
        ':team_id' => $team_id,
        ':nextEvent' => $nextEvent,
        ':previousengine2' => $previousengine2,
        ':Car2nr' => $Car2nr)
);
$affected_rows = $stmt->rowCount();

我认为上述方法可行,但为了安全起见,您可以bindValue并设置类型:

$stmt->bindValue(':Car2nr', $Car2nr, PDO::PARAM_STR);