2013-03-07 31 views
0

出於某種原因,這兩個代碼對於每個PHP多維陣列上殺死查詢變種返回返回1字符

​​

注意,只的第一個字符輸出列名稱字符串。

我哪裏錯了? :S

PHP 5.4,將使用PDO SQL。

public function getField($_field, $_id, $_type) { 
    $_args = array(
     array($_type.'_id', 'id'), 
     array($_type.'_fname', 'fname') 
    ); 
    //var_dump($_args); 
    echo $this->dbSelect($_type.'_'.$_field, $_type, $_args); 
} 

protected function dbSelect($_select, $_from, $_args) { 
    $i = 0; //var_dump($_args); 
    $query = 'SELECT '.$_select.' FROM '.$_from.' WHERE '; 
    foreach ($_args as $_where) { 
     if($i == 0) { 
      $query .= $_where[$i][0] .'=:'. $_where[$i][1]; 
     } else { 
      $query .= ' AND '.$_where[$i][0] .'=:'. $_where[$i][1]; 
     } 
     $i++; 
    } 
    die($query); 
} 
+0

你沒有正確格式化你的標識符,所以有一個注入/錯誤的可能性 – 2013-03-07 17:05:05

回答

1

$_args是一個2D數組。但是,您的foreach正在使用$_where作爲其迭代變量。 $_where本身就是一個一維數組,因此根本就不需要$i。取而代之的只是使用$_where[0]

$_where[0]應該引用該列,而$_where[1]引用其綁定的佔位符。 $i$_where的內容無關。

foreach ($_args as $_where) { 
    if($i == 0) { 
     $query .= $_where[0] .'=:'. $_where[1]; 
    } else { 
     $query .= ' AND '.$_where[0] .'=:'. $_where[1]; 
    } 
    $i++; 
} 

否則,您將獲得字符串數組鍵的訪問結果。例如:

$str = "Hello world"; 
echo $str[0]; 
// "H" 
+0

啊,明白了! Mybad,謝謝:D – mattpark22 2013-03-07 16:35:44