PDO和绑定动态关联数组参数

时间:2013-03-05 13:54:27

标签: php database pdo

我正在尝试将参数正确绑定到下面有Function的语句。我传递了一个关联数组,value=>datatype

我在尝试此操作时遇到错误:Notice: Undefined offset: 0 in db.class.php on line 69 Notice: Undefined offset: 1 in db.class.php on line 69

第69行是for

中的Function

我该如何解决这个问题?和/或我是否应该这样做呢?

这是Function

protected function ConvertParams($stmt, $params){
    $parrs = $params;
    if(is_array($parrs)){
        $parrCt = count($parrs);
        echo '<pre>';
        print_r($parrs);
        echo '</pre>';
        echo '<hr />';
        for($i = 0; $i < $parrCt; ++$i){
            switch ($parrs[$i][1]){
                case 'string':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_STR);
                    break;
                case 'int':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_INT);
                    break;
                case 'boolean':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_BOOL);
                    break;
                case 'lob':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_LOB);
                    break;
                default:
                    $stmt->bindParam($i + 1, $parrs[$i][0]);
            }
        }
    }
}

这是array

$db->Params = array('%a%'=>'string', '%Welcome%'=>'string');

请假设我正确连接到数据库,并且查询正确执行(减去此bindParam问题)。

2 个答案:

答案 0 :(得分:0)

我的第一篇帖子......我可能在这里错了,但我相信没有[0]或[1] $ parrs索引,因为你传递的命名为'%a%'和'%欢迎%”。

您可以尝试分别用%a%和%Welcome%替换[0]和[1],或者使用数组的数字索引。

答案 1 :(得分:0)

你根本不需要“正确的绑定方式”,也不需要整个这个功能。 只需直接传递一系列参数即可执行:

$params = array('%a%', '%Welcome%');
$stmt->execute($params);

它会大大缩短你的代码而没有任何缺点。

请妥善保管您的密码 无用的复杂化将使其难以支持和维护。