2012-10-04 89 views
0

我試圖使用odbc_prepare和odbc_execute語句像這樣編寫一個查詢:

$query = 'SELECT * FROM TABLE WHERE names IN (?) AND age < ?'; 
$names = "Joe, John, Billy"; 
$age = 21; 
$result = odbc_prepare($this->connection, $query); 
odbc_execute($query, array($names, $age)); 

當然,由於某種原因,這是行不通的,我已經嘗試了幾種我的$名稱變量格式的變化。任何幫助將不勝感激,因爲我一直無法找到使用odbc_prepare和WHERE IN子句的查詢的任何示例。

我使用OpenEdge 10.2A odbc驅動程序連接到Progress數據庫。

回答

1

只是爲了讓大家在未來知道我想出了這個特殊的問題:

$names = array("Joe","John","Billy"); 

$queryVars = array(); 
foreach($names AS $name){ 
    $queryVars[] = $name; 
} 

$paramBind = implode(',', array_fill(0, count($names), '?')); 
$query = 'SELECT * FROM TABLE WHERE names IN ('.$paramBind.')'; 

odbc_execute($query, $queryVars); 

希望別人發現這個有用

0

看起來你試圖以奇怪的方式使用array()

嘗試做這樣的事情:

$names = array("Joe", "John", "Billy"); 
foreach($names as $name) 
{ 
    $query = 'SELECT * FROM TABLE WHERE names IN (?)' 
    $result = odbc_prepare($this->connection, $name); 
    odbc_execute($query, $name); 
} 

這裏也是在odbc_prepare()

+0

如果我單獨它,你提出,將表明,我將3個變量傳遞給它,而不僅僅是一個。我已閱讀文檔,我的理解是,您需要一次將所有變量傳遞給一個數組,所以如果您有一個查詢具有WHERE名稱=?和年齡<?你可以傳遞數組(「Joe」,「21」)來找到所有Joe的21以下。 –

+0

因此,你想三次分別執行語句嗎? – grid

+0

也許一個更好的例子是這樣的: 'SELECT * FROM TABLE WHERE name IN(?)AND age <?' –

0

從手動我想應該是這樣的閱讀一些更多的信息:

$query = 'SELECT * FROM TABLE WHERE names IN (?)' 
$names = array("Joe", "John", "Billy"); 
$result = odbc_prepare($this->connection, $query); 
odbc_execute($query, array(implode(',', $names)); 

這給出了一個有1個元素的數組,因爲有1個參數被請求。 元素包含字符串'Joe, John, Billy',這是IN子句的正確值。

+0

最後我知道你不能爆炸一個數組。 –

+0

對不起,錯字我的意思是內爆 – JvdBerg

+0

仍然沒有骰子。我甚至設置了$ names =「'Joe','John','Billy'」;它沒有工作,就好像綁定不支持IN子句或其他東西。 –