来自函数返回数组的 PHP PDO 参数

标签 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。

如有任何帮助,我们将不胜感激。

最佳答案

我在 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() 语句进行参数化查询,而我看到您将 PDO query() 直接用于 get_query() 方法。

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

PDOStatement PDO::query ( string $statement )

您试图传递的第二个参数是错误的。

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

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

关于来自函数返回数组的 PHP PDO 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834408/

相关文章:

c - 在函数中初始化动态数组的值(C语言)

arrays - postgres 将 json 数组转换为列

php - Paypal 监听器 : Connection reset by peer?

php - 无法在 session 中存储用户 ID

php - Laravel 在测试时无法连接到 sqlite 并使用开发 postgresql 设置

mysql。语法错误 1064(42000)

java - 从一维数组中删除行

PHP 服务器循环

php - Zend form-元素错误addmultioption

java - 使用 hibernate 条件 hibernate 组中的最后一条记录