PHP PDO函数返回数组的参数

时间:2012-03-23 05:05:30

标签: php mysql arrays pdo

我编写了一个函数,它根据传递给函数的参数运行查询。

我似乎无法弄清楚为什么要执行以下操作会返回结果:

function test($function_returned_array)
{
    $variable = 'Hello World';
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $variable);
}

虽然这不会返回任何结果:

function test2($function_returned_array)
{
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $function_returned_array[0]);
}

$ function_returned_array [0]也等于'Hello World'。它们不应该都返回相同的结果吗?

当我回显$ variable和$ function_returned_array [0]的值时,它们都是'Hello World'

以下是我的PDO包装器的相关部分:

public function query(&$query, $params)
{
    $sth = $this->_db->prepare($query);

    if(is_null($params))
    {
        $sth->execute();
    }
    else if(is_array($params))
    {
        $sth->execute($params);
    }
    else
    {
        $sth->execute(array($params));
    }

    $this->_rows = $sth->rowCount();
    $this->_counter++;
    return $sth;
}

public function get_array(&$query, $params, $style = PDO::FETCH_ASSOC)
{
    $q = $this->query($query, $params);
    return $q->fetchAll($style);
}

我正在使用PHP 5.3.5。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我在PDO中目睹了同样的问题。 PDO只接受参数化查询的局部变量,而不是通过引用或参数接受,但不确定原因。

它的解决方法可以是。

function test2($function_returned_array)
{
    $variable = $function_returned_array[0];
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $variable);
}

更新:

你做错了。你必须使用PDO prepare()语句进行参数化查询,而我看到你直接在你的get_query()方法中使用PDO query()。

只有当你不想将任何参数传递给查询时才应该使用query()方法。根据php文档,这里的语法是

PDOStatement PDO::query ( string $statement )

你想要传递的第二个参数是错误的。

所以改为使用prepare()方法,这是链接。

http://in.php.net/manual/en/pdo.prepare.php

答案 1 :(得分:0)

只是抬头,问题是$ function_returned_array [0]和$ variable并没有真正相同的东西。 $ function_returned_array [0]需要通过html_entity_decode()传递。