对于每个PHP多维数组返回1个字符

时间:2013-03-07 16:25:31

标签: php mysql arrays pdo

由于某种原因,杀死查询var后的两个代码都返回:

SELECT client_fname FROM client WHERE c=:l AND f=:n

而不是:

SELECT client_fname FROM client WHERE client_id=:id AND client_id=:fname

请注意,只输出列名字符串的第一个字符。

我哪里错了? :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);
 }

1 个答案:

答案 0 :(得分: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"