gpt4 book ai didi

PHP MySQLi : String being converted to int?

转载 作者:行者123 更新时间:2023-11-30 23:47:17 24 4
gpt4 key购买 nike

我有一个 php 函数,它使用 mysqli 准备语句将 32 个字符的标记保存到 mysql 数据库中。我遇到的问题是,当将这个 32 个字符的字母数字标记插入数据库时​​,如果标记以数字开头,则仅存储第一组连续数字,否则为 0。例如:

  • 47f1f737fe813b9f19ecadc524eddcc1 存储为 47
  • cba73ec72629938c92b5bb81207c8b0b存储为0
  • 1c1348bb3f85f006151b0111b5ae26f7 存储为 1

表格设置如下:

CREATE TABLE `user_password_tokens` (
`id` int(9) NOT NULL,
`token` varchar(64) NOT NULL,
`expiration` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `token` (`token`),
CONSTRAINT `user_password_tokens_id` FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

相关的php代码是:

$log->add("ID: " . $parameters['data']['id'] . " | Token: " . $parameters['token']['value'], 1);
$stmt = $db->prepare("
INSERT INTO user_password_tokens
VALUES (?, ?, NOW() + INTERVAL 1 HOUR)
ON DUPLICATE KEY UPDATE id=id, token=VALUES(token), expiration=VALUES(expiration)");
$stmt->bind_param("ss", $parameters['data']['id'], $parameters['token']['value']);
$stmt->execute()

PHP 代码开头的日志语句生成 token 的预期值。此外, token 正在通过 API 调用传递给正确接收它的另一个服务。有没有人见过这样的事情或知道发生了什么事?

编辑:我要补充一点,使用我的数据库客户端直接与数据库交互将允许我存储整个值,因此它似乎不是 MySQL 或表定义本身的问题,而是值是被准备好的语句改变。无论如何,我最好的猜测。

PHP 版本 5.5.26,MySQL 版本 5.0.96

第二个问题是为什么我必须将 int 'id' 作为字符串传递才能使准备好的语句成功?无法让它在 bind_param 中作为 int 工作。

最佳答案

只是为了回答。

somehow the value is being altered by the prepared statement

准备好的语句不会改变您的数据。所有更改都只能通过用户代码来完成。检查您的代码。

why do I have to pass the int 'id' as a string

你不必。如果你不能让它工作,那么你做错了什么。仔细检查您的代码。

关于PHP MySQLi : String being converted to int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com