2012-03-23 206 views
1

我已經寫了一個函數,它根據傳遞給函數的參數運行查詢。函數PHP 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'。他們不應該都返回相同的結果嗎?

當我呼應$變量和$ function_returned_array值[0],它們都是「你好世界」

這裏是我的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。

任何幫助,將不勝感激。

+1

此代碼缺少調試。並要求陌生人精神上進行調試。我只是-1它,但不要僅僅爲了有一個* PDO包裝* - 在這個「發燒友程序員」網站上幾乎從未見過的東西 – 2012-03-23 05:11:23

+0

對不起,我認爲這是足夠清楚:(我會編輯它更多一點 – noko 2012-03-23 05:14:44

+1

爲什麼你傳遞查詢字符串作爲參考? – Phil 2012-03-23 05:18:09

回答

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()語句進行參數化查詢,而我看到你正在使用PDO query()直接進入你的get_query()方法。

你應該使用query()方法只有當你不想按照PHP文檔這裏的任何參數傳遞給query.and是語法

PDOStatement PDO::query (string $statement) 

你試圖傳遞的第二個參數是錯誤的。

所以改爲使用prepare()方法,這裏是鏈接。

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

+0

感謝您的回覆,我也試過這個,它仍然返回不同於test()的結果。雖然,當我在test2()中手動設置$ function_returned_array [1]的值時,它有效。還有什麼想法? – noko 2012-03-23 05:30:42

+0

堅持我認爲我得到了你的問題,你做錯了方式。不適當更新我的帖子與解釋。 – 2012-03-23 05:39:37

+0

感謝您的回覆,我在$ sth = $ this - > _ db-> prepare($ query)中使用了prepare()方法。不過我會再看一遍。我的代碼一定有其他錯誤! – noko 2012-03-23 05:56:51

0

剛擡起頭,問題是,$ function_returned_array [0],$變量並不真正等於同樣的事情。 $ function_returned_array [0]需要通過html_entity_decode()傳遞。