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