我有一个脚本从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 ;;我知道接收单元支持前导零,因为其他查询导致它没有问题,但它已经两年了,这真的是我的头脑。感谢任何帮助!
答案 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);