mysql bind\u param变量类型为什么不遵循规则

mwyxok5s  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(322)

我对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\ u id的代码中,如果我将两个变量都绑定为字符串,那么id显然是整数。

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

代码仍然有效。有人能解释一下吗?

aemubtdh

aemubtdh1#

mysql隐式地执行数据类型转换。
作为示范,请考虑:

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

我们还可以显式地进行数据类型转换,例如,使用 CAST 或者 CONVERT .
从字符串到数字的转换非常简单。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隐式地将列值转换为数字,并与数字文本进行比较。
另外,使用带绑定占位符的准备语句也值得称赞!

相关问题