阶乘结果应存为varchar(1000)并用bcmul计算后参数化插入,因bigint无法容纳21!及以上数值,字符串存储可避免截断且支持精确比对。
PHP计算阶乘后怎么存进MySQL
直接用 mysqli 或 PDO 插入就行,但要注意阶乘结果可能极大——比如 20! 就超过 24 位,远超 INT 和 BIGINT 范围。不处理类型,插进去就是 0 或截断。
阶乘结果该用什么字段类型存
MySQL 里不能用数值类型安全存大阶乘值,BIGINT UNSIGNED 最大只到 18446744073709551615(约 20!),而 21! 就爆了。必须用字符串类型:
-
VARCHAR(1000)足够存1000!(约 2568 位数字),日常够用 - 别用
TEXT,除非真要存超大阶乘(如 10000!),它有额外开销且不支持索引前缀 - 字段加
NOT NULL和COLLATE utf8mb4_bin,避免大小写或空格隐式转换影响比对
PHP里怎么安全把阶乘值插入数据库
核心是:先算出字符串形式的阶乘(别用 float 或 int 中间存储),再参数化插入。推荐用 bcmul 做高精度乘法:
// 示例:计算 n! 并入库
function factorial($n) {
if ($n < 0) return '0';
if ($n <= 1) return '1';
$result = '1';
for ($i = 2; $i <= $n; $i++) {
$result = bcmul($result, (string)$i);
}
return $result;
}
$n = 50;
$fact = factorial($n);
$stmt = $pdo->prepare("INSERT INTO factorials (n, result) VALUES (?, ?)");
$stmt->execute([$n, $fact]);
注意点: