0

何らかの理由で、クエリ 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);
 }
4

1 に答える 1

1

$_args二次元配列でした。ただし、繰り返し変数として foreach使用しています。はそれ自体が1 次元配列であるため、ここではまったく必要ありません。代わりに使用するだけ$_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"
于 2013-03-07T16:29:30.490 に答える