Php PDO-动态bindParam-0结果的值

Php PDO-动态bindParam-0结果的值,php,mysql,pdo,Php,Mysql,Pdo,因此,感谢这里用户的建议,我已经开始将代码移植到PDO。在一个小问题出现之前,一切都很顺利 我有一个小函数来处理我的数据库调用,它基本上生成SQL查询,执行$dbh->prepare($SQL),然后循环并绑定值,然后执行查询 $sth = $dbh->prepare ($sql); // bind parameters if ($action == 'insert' || $action == 'update') { reset ($array); foreach ($a

因此,感谢这里用户的建议,我已经开始将代码移植到PDO。在一个小问题出现之前,一切都很顺利

我有一个小函数来处理我的数据库调用,它基本上生成SQL查询,执行$dbh->prepare($SQL),然后循环并绑定值,然后执行查询

$sth = $dbh->prepare ($sql);
// bind parameters
if ($action == 'insert' || $action == 'update') {
    reset ($array);
    foreach ($array as $key => &$value) {
        if ($value != 'NOW()') {
            $sth->bindParam (':' . $key, $value);
        }
    }
}
$sth->execute();
在我需要插入值“0”之前,这一切都很正常。没有返回错误,但插入到db中的值是表中列类型的最大值,在本例中为“137”

我更希望有人能解释发生了什么,并提供解决方案,而不是仅仅给我一个解决方案,这样我才能更好地理解这一点

干杯,
Luke

您没有正确绑定参数,请检查。
您应该使用:

$sth->bindParam (':' . $value, [PARAM TYPE - example: PDO::PARAM_INT]);

啊。对在飞行中检测这种类型是否安全?比如:
if(is_int($value)){..}或者if(is_float($value)){…}
等等?我不确定您的实现,您可以动态地检测它,但我更希望提前“知道”(当创建参数以创建“类型”并传递它时)。如果您决定动态检测它,不要忘记
==
是无用的,在
0
的情况下使用
==
,并且有类似
的函数(对于每种类型),您也可以使用。还有一件事,尽管这会抱怨PHP的“不良行为”,但我实际上发现它很好而且很有趣,通过阅读,您可以学到很多关于PHP的知识!我试图用一个只需传递一些参数的函数来简化编写INSERT、UPDATE和DELETE语句的过程,包括一个带有$key=>$value对的数组,该数组表示列名及其值。使用mysql时,它工作得很好,但事实证明这有点复杂。也许我需要使用它。你停止使用它是件好事。PDO更安全,如果您重复使用prepared语句,它对性能也有很好的影响。正如我所说,当您传递列名和值时,您也可以传递列类型,这将是我的首选。不客气!