prepare("SELECT-6ren">
gpt4 book ai didi

php - 无论指定或给定什么数据类型,bindParam 都能正常工作

转载 作者:行者123 更新时间:2023-11-29 11:54:27 27 4
gpt4 key购买 nike

在 self 介绍 pgSQL 准备语句时,我已经成功地返回了几个查询的结果。但是,我有几个问题。

给定以下查询:

$w_ft = "36"; 
$sth = $dbh->prepare("SELECT * FROM main_products_common_dimensions WHERE w_ft = :w_ft");
$sth->bindParam(':w_ft', $theId, PDO::PARAM_INT);
$sth->execute();
$result = $sth->fetchAll();

我注意到即使 main_products_common_dimensions 表中的列是 character_varying,如果我使用

$w_ft = 36; 
...
$sth->bindParam(':w_ft', $w_ft, PDO::PARAM_INT);

$w_ft = "36"; 
...
$sth->bindParam(':w_ft', $w_ft, PDO::PARAM_STR);

$w_ft = "36"; 
...
$sth->bindParam(':w_ft', $w_ft, PDO::PARAM_INT);

$w_ft = 36; 
...
$sth->bindParam(':w_ft', $w_ft, PDO::PARAM_STR);

也就是说,无论我如何绑定(bind)参数 _INT_STR 或设置变量(整数或字符串),数据都会正确返回。这是正常行为吗?

来自 http://php.net/manual/en/pdostatement.bindparam.php , 我看到参数数据类型有解释

Explicit data type for the parameter using the PDO::PARAM_* constants. To return an INOUT parameter from a stored procedure, use the bitwise OR operator to set the PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter.

“从存储过程返回 INOUT 参数”是什么意思?这有关系吗?这是否意味着我没有使用存储过程?长度似乎是可选的,尽管在它的解释中没有说明。提供它有什么好处吗?

如您所见,我对此很陌生,只是想了解一下。非常感谢

最佳答案

PDO::PARAM_INTPDO::PARAM_STR 传递给 bindParam() 时表示驱动程序可以随意忽略。

查看 PDO pg 驱动程序的 source code , 看起来,除了被特殊处理的 PDO_PARAM_LOB 之外,所有类型都被引用为字符串(即,在引号之间并传递给 libpq 的 PQescapeStringConn 函数)

您还应该了解 PDO::ATTR_EMULATE_PREPARES 属性,该属性控制在后台使用的方法。当 false 时,PQprepare() 与真正的查询外参数一起使用。如果 true,参数值被注入(inject)到传递给非参数化 PQexec() 的 SQL 中。从技术上讲,这是完全不同的,因此根据此属性,您可能会在极端情况或错误情况下看到不同的行为。

关于php - 无论指定或给定什么数据类型,bindParam 都能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14462254/

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