pr-6ren">
gpt4 book ai didi

mysql的bind_param变量类型为什么不遵循规则

转载 作者:行者123 更新时间:2023-11-29 17:40:45 25 4
gpt4 key购买 nike

我正在将以下查询与bind_param一起使用:

$qry=" UPDATE `prog_m` SET prog_descr=? WHERE prog_id=? ";
$stmt= $conn->prepare($qry);
$stmt->bind_param('si', $content_text, $prog_id);

在关于 prog_id 的代码中,如果我将两个变量绑定(bind)为字符串,则显然是整数,即

bind_param('ss', $content_text, $prog_id);

代码仍然有效。谁能解释一下怎么做吗?

最佳答案

MySQL 隐式执行数据类型转换。

作为演示,请考虑:

SELECT 4       + 1
, ' 4' + 1
, '4tune' + 1

我们还可以显式进行数据类型转换,例如使用 CASTCONVERT

从字符串到数字的转换非常简单。 MySQL 引用手册中记录了该行为:

https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

<小时/>

我们可以在具体示例中观察到这种行为。考虑数字文字的情况:

UPDATE `prog_m` SET prog_descr = 'foo' WHERE prog_id = 42 ;

并与字符串文字进行比较

UPDATE `prog_m` SET prog_descr = 'bar' WHERE prog_id = '42' ;
^ ^

如果prog_id列是数字,MySQL执行字符串文字到数字的隐式转换。

如果 prog_id是字符类型,在第一种情况下,MySQL将数字文字隐式转换为字符串。

如果prog_id是字符类型列,在第一种情况下,MySQL将列值隐式转换为数字,并与数字文字进行比较。

<小时/>

此外,对使用带有绑定(bind)占位符的准备好的语句表示赞赏!

关于mysql的bind_param变量类型为什么不遵循规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025658/

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