1

使用 PDO,我构建了一个简洁的对象,用于从数据库中检索行作为 PHP 对象,第一列值是名称,第二列值是所需值。

$sql = "SELECT * FROM `site`"; $site = array();
foreach($sodb->query($sql) as $sitefield){
    $site[$sitefield['name']] = $sitefield['value'];
}

我现在想将它应用于具有 2 个参数的函数,第一个包含表,第二个包含任何 where 子句,然后产生相同的结果。

function select($table,$condition){
    $sql = "SELECT * FROM `$table`";
    if($condition){
        $sql .= " WHERE $condition";
    }
    foreach($sodb->query($sql) as $field){
        return $table[$field['name']] = $field['value'];
    }
}

可以这样称呼的想法:

 <?php select("options","class = 'apples'");?>

然后以与第一种方法相同的格式在页面上使用。

<?php echo $option['green'];?>

给我一个名为 value 的列的值,它与名为 field 的列中名为“green”的值位于同一行。

问题当然是该函数不会像那样返回 foreach 数据。也就是这一点:

        foreach($sodb->query($sql) as $field){
            return $table[$field['name']] = $field['value'];
        }

不能返回这样的数据。

有没有办法做到?

4

1 回答 1

0

嗯,这个:

$sql = "SELECT * FROM `site`"; $site = array();
foreach($sodb->query($sql) as $sitefield){
    $site[$sitefield['name']] = $sitefield['value'];
}

很容易变成这样:

$sql = "SELECT * FROM `site`";
$site = array();
foreach( $sodb->query($sql) as $row )
{
    $site[] = $row;
}

print_r($site);

// or, where 0 is the index you want, etc.
echo $site[0]['name'];

因此,您应该能够将所有列映射到多维数组$site中。

此外,不要忘记在将输入直接转储到该查询之前对其进行清理。PDO 的好处之一是使用占位符来保护自己免受恶意用户的侵害。

于 2012-09-06T18:46:16.077 回答