更新mysql操作不使用cc编号



我正试图通过发送表单来更新用户信息,但如果我更改信用卡(tarjeta-credito(字段,它将不起作用,尽管函数会接收新数据。如果我输入000000000000值,它就工作了,然后如果我输入例如333333333333,它总是存储这个值:"2147483647">

{
$usuario->tarjetaCredito = 123121123123;
var_dump($usuario->tarjetaCredito);
$app = App::getSingleton();
$conn = $app->conexionBd();
$query=sprintf("UPDATE usuarios U SET nombre='%s', password='%s', nombreUsuario='%s', dni='%s', direccion='%s', email='%s', telefono='%s', ciudad='%s', `codigo postal`='%s',`tarjeta credito`=%d WHERE U.id = %d"
, $conn->real_escape_string($usuario->nombre)  
, $conn->real_escape_string($usuario->password)
, $conn->real_escape_string($usuario->nombreUsuario)
, $conn->real_escape_string($usuario->dni)
, $conn->real_escape_string($usuario->direccion)
, $conn->real_escape_string($usuario->email)
, $conn->real_escape_string($usuario->telefono)
, $conn->real_escape_string($usuario->ciudad)
, $conn->real_escape_string($usuario->codigoPostal)
, $usuario->tarjetaCredito
, $usuario->id);
if ( $conn->query($query)) {
if ( $conn->affected_rows != 1) {
echo "No se ha podido actualizar el usuario: " . $usuario->nombreUsuario;
exit();
}
} else {
echo "Error al insertar en la BD: (" . $conn->errno . ") " . utf8_encode($conn->error);
exit();
}

return $usuario;
}

...
<div class="form-group m-2">
<label>tarjeta credito:</label> <input class="form-control" name="tarjetaCredito" value="$tarjetaCredito"  type="tel" inputmode="numeric" pattern="[0-9s]{13,19}"placeholder="xxxx xxxx xxxx xxxx" autocomplete="cc-number" maxlength="19" />
</div>
...
mysql table:
`tarjeta credito` int(20) NOT NULL, 

信用卡号不是"数字";在数学意义上,它恰好是一串数字。你永远不需要问";这个卡号加一是多少"或";。。。乘以2&";,但你可能想问";这个卡号的前四位是多少"或";最后四个">

如果你真的把它当作一个数字,它将是一个比你通常使用的数字大得多的数字:44443333322221111(一个Visa测试卡号码(是";4万亿444万亿3330亿3220亿221000 1100";。

重要的是,可以存储在有符号32位整数中的最大数字-这是当您指定";int";在SQL中,只有20多亿,所以卡号不太合适。你的数据库要么会给你一个错误,要么只存储其他合适的数字——在你的情况下,它只存储它能存储的最高数字。

您可以将您的列更改为";bigint";(64位有符号,最大值约为9个五分之一(,但最好将它们作为PHP中的字符串,并在数据库中作为VarChar。

最新更新