将表变量传递给SELECT函数

时间:2015-03-31 23:17:28

标签: php if-statement mysqli prepared-statement

我有一个getData()函数,以及一个包含两个表的数据库:雇主和成员。 我想传递一个包含表名的变量,所以在“if”中我可以执行相应的SELECT语句。我的问题我相信在“if”之后$stmt->bind_param();不知道哪个$stmt绑定了。 关于如何实现这一目标的任何想法?

由于

public function getData($table)
{
    if ($table == "employers")
    {
    $stmt = $this->link->prepare("SELECT * FROM employers ");
    }
    else
    {
    $stmt = $this->link->prepare("SELECT * FROM members ");
    } 

    $stmt->bind_param();
    if ($stmt->execute())
    {
        $result = $stmt->get_result();
        while($row = $result->fetch_array(MYSQLI_ASSOC))
            { 
            $row = array_map('stripslashes', $row);
            $dataArray[] = $row;
            }
    }

    return $dataArray;      
}

1 个答案:

答案 0 :(得分:1)

不,因为你没有约束任何东西,所以->bind_param方法是多余的。就这样吧。

public function getData($table)
{
    $dataArray = array();
    $t = ($table === 'employers') ? 'employers' : 'members';
    $query = "SELECT * FROM $t";
    $stmt = $this->link->prepare($query);
    if($stmt->execute()) {
        $result = $stmt->get_result();
        while($row = $result->fetch_assoc()) {
            $row = array_map('stripslashes', $row);
            $dataArray[] = $row;
        }
    }

    return $dataArray;
}

样本用法:

$data = $aministrator_query->getData('members');
$tbody = '';
foreach($data as $row) {
    $tbody .= "<tr><td>{$row['user_id']}</td><td>{$row['user_password']}</td><td>{$row['user_first_name']}</td><td>{$row['user_last_name']}</td></tr>";
}
$table = sprintf('<table><thead><tr><th>ID</th><th>Password</th><th>First Name</th><th>Last Name</th></tr></thead><tbody>%s</tbody></table>', $tbody);
echo $table;