簡體   English   中英

來自函數的PHP PDO參數返回數組

[英]PHP PDO Parameters from a function returned array

我編寫了一個函數,該函數根據傳遞給該函數的參數運行查詢。

我似乎無法弄清楚為什么執行以下操作會返回結果:

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()才應使用query()方法。根據php文檔,這是語法

PDOStatement PDO::query ( string $statement )

您嘗試傳遞的第二個參數是錯誤的。

因此,請改用prepare()方法,這是鏈接。

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

請注意,問題在於$ function_returned_array [0]和$ variable並不完全相同。 $ function_returned_array [0]需要通過html_entity_decode()傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM