【问题标题】:For each PHP multi dimension array returns 1 characterForeach PHP 多维数组返回 1 个字符
【发布时间】:2013-03-07 16:25:31
【问题描述】:

由于某种原因,杀死查询 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);
 }

【问题讨论】:

  • 你没有正确格式化你的标识符,所以,存在注入/错误的可能性

标签: php mysql arrays pdo


【解决方案1】:

$_args 是一个二维数组。但是,您的 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"

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2015-08-13
    • 1970-01-01
    • 2018-10-01
    相关资源
    最近更新 更多