gpt4 book ai didi

php - PDO 查询绑定(bind)字符串而不是整数返回结果

转载 作者:可可西里 更新时间:2023-11-01 07:51:06 24 4
gpt4 key购买 nike

我有一个带有自动递增 id 的表,当我偶然发现 PDO 或 mysql 似乎将数组中的字符串转换为整数的问题时,我正在测试几个场景。有谁知道为什么吗?

如果我的查询如下:

$check = $db->prepare("SELECT * FROM tbl_test WHERE id=:id");
$check->execute(array(':id'=>1));

它检索到 1 条记录 - 一切正常,但如果查询使用了一个字符串,要么是有意为之,要么是错误的,如下所示:

$check = $db->prepare("SELECT * FROM tbl_test WHERE id=:id");
$check->execute(array(':id'=>'1 OR id > 0'));

它仍然检索 id=1 的记录。

肯定什么也找不到?我很感激我永远不应该允许第二种情况发生,但为什么 PDO/mysql 将字符串转换为整数,它是如何做到的?

最佳答案

这是一个 MySQL 错误/在字符串到整数转换中的疏忽。它不会在给定不正确的整数文字时引发错误,而只是发出警告。

mysql> select '1'+0;
+-------+
| '1'+0 |
+-------+
| 1 |
+-------+
1 row in set (0,00 sec)

mysql> select '1 hello world'+0;
+-------------------+
| '1 hello world'+0 |
+-------------------+
| 1 |
+-------------------+
1 row in set, 1 warning (0,00 sec)

mysql> show warnings;
+---------+------+---------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '1 hello world' |
+---------+------+---------------------------------------------------+
1 row in set (0,00 sec)

关于php - PDO 查询绑定(bind)字符串而不是整数返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43138785/

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