【问题标题】:php pdo prepared statements: bindParam doesn't workphp pdo 准备好的语句:bindParam 不起作用
【发布时间】:2011-11-10 01:10:21
【问题描述】:

为什么这不起作用:

public function query($query, $vars = array())
{
    $link = $this->getLink();
    if($link)
    {
        $stmt = $link->prepare($query);
        if($stmt)
        {
            if(count($vars)>0)
            {
                $count = 1;
                foreach($vars as $v)
                {
                    $stmt->bindParam($count, $v);
                    $count++;
                }
            }
            if($stmt->execute())
                return $stmt->fetch(PDO::FETCH_ASSOC);
        }
    }
    return false;
}

这很有效:

public function query($query, $vars = array())
{
    $link = $this->getLink();
    if($link)
    {
        $stmt = $link->prepare($query);
        if($stmt)
        {
            if($stmt->execute($vars))
                return $stmt->fetch(PDO::FETCH_ASSOC);
        }
    }
    return false;
}

调用:

$result = $db->query('select * from users where user like ? and email like ?',array('my_user', 'myemail@domain.com'));

用最终代码编辑:

public function query($query, $vars = array())
{
    $link = $this->getLink();
    if($link)
    {
        $stmt = $link->prepare($query);
        if($stmt)
        {
            if(count($vars)>0)
            {
                $count = 1;
                foreach($vars as $v)
                {
                    $stmt->bindValue($count, $v);
                    $count++;
                }
            }
            if($stmt->execute())
                return $stmt->fetch(PDO::FETCH_ASSOC);
        }
    }
    return false;
}

【问题讨论】:

    标签: php pdo prepared-statement


    【解决方案1】:

    原因是bindParam 将一个变量(不是它的值)绑定到一个参数。但是,$v 的值会随着for 循环的每次迭代而变化,因此您的每个查询参数都将数组中的最后一项作为其值(我确定不是您想要的)。

    我建议使用bindValue 而不是bindParam

    【讨论】:

      【解决方案2】:

      我对 PDO 不是很熟悉,但您似乎无法绑定不断变化的变量。请改用 bindValue。

      还请注意,您不应以这种方式使用 LIKE。请改用=

      【讨论】:

        猜你喜欢
        • 2021-08-15
        • 2018-01-24
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多