2013-10-03 65 views
0

我試圖通過PDO基數違規:1241操作數應包含1列(S)PDO

db::query("SELECT v.id, v.rel_x, v.rel_y FROM p_villages v WHERE v.field_maps_id=3 
      AND ISNULL(v.player_id) AND (v.rel_x >= ?,?,?,? AND v.rel_x <= ?,?,?,?) 
      AND (v.rel_y >= ?,?,?,? AND v.rel_y <= ?,?,?,?) 
      AND v.rand_num > 0 ORDER BY v.rand_num LIMIT 1",array(1,2,3,3,1,2,3,3,1,2,3,3,1,2,3,3)); 

運行此代碼,但我發現這個錯誤

Warning: PDOStatement::execute(): SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) \ 

所以,我需要輸出查詢像SELECT v.id, v.rel_x, v.rel_y FROM p_villages v WHERE v.field_maps_id=3 AND ISNULL(v.player_id) AND (v.rel_x >= 1,2,3,4 AND v.rel_x <= 1,2,3,4) AND (v.rel_y >= 1,2,3,4 AND v.rel_y <= 1,2,3,4) AND v.rand_num > 0 ORDER BY v.rand_num LIMIT 1和參數我想通過這些參數中的每個參數,這裏是16

我該怎麼辦?

+0

您的SQL語法錯誤。您不能將大於/小於運算符應用於運算符兩邊的多個列,例如'v.rel_x> =?,?,?,?'是沒有意義的,並且會給您一個錯誤。 – Dan

回答

1

這樣的:v.rel_y <= ?,?,?,?

看起來怪怪的。

綁定參數必須是自包含的,您不能通過多個構建比較的右側或左側部分。

即,如果你的意思是說x >= 5.1,你不能把x >= ?.?,並通過2個參數到PDO聲明。 然後您必須通過x >= ?然後bindValue(5.1);

+0

因此,我需要輸出查詢,如 'SELECT v.id,v.rel_x,v.rel_y FROM p_villages v WHERE v.field_maps_id = 3 AND ISNULL(v.player_id)AND(v.rel_x> = 1, 2,3,4 AND v.rel_x <= 1,2,3,4) AND(v.rel_y> = 1,2,3,4 AND v.rel_y <= 1,2,3,4) AND v.rand_num> 0 ORDER BY v.rand_num LIMIT 1' 並在參數我想傳遞這些參數的每個參數,這裏是16 –

+0

@BodyLove我認爲你需要修改你的SQL語法。在比較中,您不能使用以逗號分隔的數字。另外它只是沒有意義,爲什麼你會用1,2,3,4而不是4和1? – Sebas

相關問題