当前位置: 首页 > 面试题库 >

PHP PDO :: bindParam()数据类型..它如何工作?

蒋俊
2023-03-14
问题内容

我想知道bindParam()(或bindValue())中数据类型的声明用于…

我的意思是,我认为如果定义整数参数PDO::PARAM_INT),则必须将参数转换为整数,例如

$delete->bindParam(1, $kill, PDO::PARAM_INT);
// should work like
$delete->bindParam(1, (int)$kill);

或如果参数不是声明的类型,则至少引发错误。但这种情况并非如此。

到处搜寻,我在php.net档案库中发现:

大家好,

我目前正在研究PDO。正是在bindParam()函数上。第三个参数data_type似乎在这里强制值的类型?但是当我尝试:

$sql = "INSERT INTO produit (idproduit, nom, marque) VALUES (NULL, :nom,
:marque)";
$stmt = $dbh->prepare($sql);
$nom = 'Testarossa'; $marque = 'Ferrari' ;
$stmt->BindValue(':marque',$marque) ;
$stmt->BindParam(':nom',$nom,PDO::PARAM_INT) ;

$stmt->execute(); $nom = '250 GTO' ;
$stmt->execute(); ?>

我期望数据库中有PHP错误或整数。但是在我的数据库中,我有:

22 Testarossa法拉利23250 GTO法拉利

这意味着如果我没有第三个参数,它不会改变。也许我想念一些东西。有人可以给我更多吗?或者有人可以告诉我在哪里可以找到有关它的信息。

问候,

那正是我的情况。我的想法哪里出问题了?


问题答案:

在其他语言的其他数据库抽象框架中,它可用于确保诸如对内联值进行正确的转义(对于不支持正确绑定参数的驱动程序)以及通过确保数字是否正确来提高网络效率。适当打包二进制文件(提供协议支持)。看起来像在PDO中,它并没有做太多事情。

   if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_STR && param->max_value_len <= 0 && ! ZVAL_IS_NULL(param->parameter)) {
                if (Z_TYPE_P(param->parameter) == IS_DOUBLE) {
                        char *p;
                        int len = spprintf(&p, 0, "%F", Z_DVAL_P(param->parameter));
                        ZVAL_STRINGL(param->parameter, p, len, 0);
                } else {
                        convert_to_string(param->parameter);
                }
        } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) {
                convert_to_long(param->parameter);
        } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_BOOL && Z_TYPE_P(param->parameter) == IS_LONG) {
                convert_to_boolean(param->parameter);
        }

因此,如果您说它是STR(或者您什么也不说,因为这是默认值),并且您的数据的内部类型是double,那么它将使用一种方法将其转换为字符串,如果不是double,则它将会使用其他方法将其转换为字符串。

如果您说这是一个整数,但实际上是布尔值,那么它将把它转换为long。

如果您说的是布尔值,但实际上是一个数字,那么它将把它转换为真正的布尔值。

我实际上是(快速地)查看了stmt源代码,我想一旦将参数传递到驱动程序中,它们就可以做更多的事情。因此,我想您所获得的只是一点点正确的做,以及驾驶员之间很多行为的歧义和差异。



 类似资料:
  • 我刚刚开始在Haskell中编程,我遇到了以下定义:

  • 问题内容: 细节 我想利用mysql的空间扩展,因此我试图使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。不幸的是,我不断收到错误SQLSTATE [23000]:违反完整性约束:1048列“位置”不能为空。 我检查了经度和纬度是否有价值。因此问题必须出在我的代码上,但我看不到自己在做什么错。 这是我正在使用的代码。 题 我究竟做错了什么?如何使用PDO和bindPa

  • 本文向大家介绍Javascript如何判断数据类型和数组类型,包括了Javascript如何判断数据类型和数组类型的使用技巧和注意事项,需要的朋友参考一下 这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如"string" nu

  • 本文向大家介绍JavaScript如何判断input数据类型,包括了JavaScript如何判断input数据类型的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JavaScript如何判断input数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在HTML中接收用户输入信息一般都会用到<input/>。我今天本来想实现一个功

  • 我已经将Luxon创建的datetime值保存到postgres数据库列中,类型为TIMESTAMP(3)。然后我想使用这个值,把它转换成其他时区,等等。然而,我似乎想不出如何“利用”它。 我使用以下方法创建了该对象: 然后,我将其插入到postgres数据库中,插入时间戳(3)类型的列中。 我使用查询从数据库中提取它。当我记录它时,它说它的值是: 我可以找到很多关于如何将日期插入sql的教程,但

  • 如何记录在数据库上执行的最终查询。为org.springframework.jdbc包启用调试日志对我来说不起作用。