Php MySQL中保持零领先

Php MySQL中保持零领先,php,mysql,database,integer,zero,Php,Mysql,Database,Integer,Zero,我有一个带有varchar列的表。我使用值为01、02、03、04….的select表单。。。。10、11、12等将数据存储在此列中。我的问题是,当我提交表单时,前导的“零”被删除。如何保持前导零 ** 注意。我查过其他类似的帖子,但他们没有 我的问题的解决方案。我尝试过var/char/text,但仍然没有成功 因此,如果有其他方法可以做到这一点,我为什么要发布这个问题 ** 使用sprintf格式化您的值: $caption = sprintf("%02d-%02d",

我有一个带有varchar列的表。我使用值为01、02、03、04….的select表单。。。。10、11、12等将数据存储在此列中。我的问题是,当我提交表单时,前导的“零”被删除。如何保持前导零

**

注意。我查过其他类似的帖子,但他们没有 我的问题的解决方案。我尝试过var/char/text,但仍然没有成功 因此,如果有其他方法可以做到这一点,我为什么要发布这个问题

**


使用
sprintf
格式化您的值:

$caption = sprintf("%02d-%02d", $_POST['dd'], $_POST['mm']);

这里的关键是将数据作为字符串处理,而不是像
-$\u POST['mm']
那样对其进行数学运算,后者会将其视为一个数字。在数字中,前导零总是被省略,因为它们总是存在。就CPU而言,10实际上类似于
0x0000000a

警告:尽可能使用带有占位符值的准备语句,以避免在查询和创建过程中注入任意数据。在任何用户提供的数据都指定有
:name
指示符的情况下,这些都非常简单,稍后将使用
bind_param
execute
填充指示符,具体取决于您使用的是哪一个。“我已经尝试了var/char/text,但它仍然不起作用”-这是因为它与您的数据库列类型无关,在此之前您已经丢失了前导零,因为您正在用PHP进行数学运算。数学只适用于数字,数字没有前导零-因此PHP会在执行减法之前为您优雅地“删除”它们(将字符串值隐式转换为实际数字)。@cbroe实际上这不是减法,而是破折号。这就是为什么我用这个。(点)在破折号之前。它仍然会强制值进入数字上下文,使用输入值
09
03
,您将得到
09-3
,如果第二个值不是数字,您将得到
警告:遇到非数字值
。如果要在该位置连接文本,则需要编写实际的文本文字<代码>$\u POST['dd'].-'.$\u POST['mm']将是此处的(/a)正确语法。Thanxxx!工作得很有魅力。我宁愿建议相反的做法。将数据视为整数。并根据需要设置显示格式。这假定数字中有实用程序,而这不会扩展为本质上是字符串的内容。是的,对于从1到11的一组有序值来说,这似乎是公平的
    $caption = $_POST['dd'].-$_POST['mm'];
    
    $sql = "INSERT INTO pages SET caption = '$caption'";
$caption = sprintf("%02d-%02d", $_POST['dd'], $_POST['mm']);