gpt4 book ai didi

php - MySQL 使用 int 从 char 列中选择 - 前导零导致意外结果

转载 作者:可可西里 更新时间:2023-11-01 08:54:00 27 4
gpt4 key购买 nike

我有以下数据:

stockcode (CHAR) | description (VARCHAR)
----------------------------------------------
1234 | some product
01234 | some other product

我运行以下代码:

$sql = "SELECT * FROM stock WHERE stockcode = " . $db->quoteSmart($stockcode)
$res = $db->query($sql);

如果我传入股票代码“01234”,我会按预期获得第二行。如果我传入“1234”,我会得到两行,而我预计只会得到第一行。

通过回显 sql 语句,似乎是因为只有 01234 股票代码在其周围有引号,而 1234 却没有(大概是 quoteSmart 认为它是一个整数,所以不需要引号?)。

然后 Mysql 将 int 1234 与 CHAR 列进行比较,并确定它们都匹配(大概是作为 int 进行比较?)

代码中有很多地方构建这样的查询,99% 的时候,stockcode 变量将是字母数字,只是偶尔完全是数字,很少包含前导零,这只是一个今天偶然发现的侥幸。

谁能推荐一个简单的解决方案?

最佳答案

尝试将变量显式转换为字符串:

$db->quoteSmart((string)$stockcode);
// instead of:
// $db->quoteSmart($stockcode);

编辑:

如果这不起作用,我想 quoteSmart() 并不是真的那么聪明(或者它为了自己的利益而试图变得太聪明),所以你很可能需要停止使用它并坚持使用绑定(bind)参数(无论如何我建议使用此方法)。

关于php - MySQL 使用 int 从 char 列中选择 - 前导零导致意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8974220/

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