Php PDO:使用变量选择特定字段
我目前使用以下构造创建成员对象:Php PDO:使用变量选择特定字段,php,pdo,Php,Pdo,我目前使用以下构造创建成员对象: class Member{ private $member_id = 0; private $name, $surname, $email; public function __construct(){} public function construct($conn, $param_select = '*', $param_member_id){ $query_rs_this = $conn->prepare('SELECT
class Member{
private $member_id = 0;
private $name, $surname, $email;
public function __construct(){}
public function construct($conn, $param_select = '*', $param_member_id){
$query_rs_this = $conn->prepare('SELECT :select FROM members WHERE
member_id = :member_id
ORDER BY members.surname');
$query_rs_this->execute(array(':select' => $param_select, ':member_id' => $param_member_id));
$rs_this = $query_rs_this->fetch(PDO::FETCH_ASSOC);
$query_rs_this->closeCursor();
foreach($rs_this as $key => $value){
$this->$key = $value;
}
unset($key);
}
我想传递一个字符串,其中包含应从数据库中选择的列(字段名)。目前我使用的是:
$temp = new Member();
$select = "name, surname, email";
$temp->construct($db_conn, $select, 1);
其中$select是包含字段名称的字符串
目前,我得到以下输出:
成员id:0
姓名:
姓:
电邮:
?:姓名、姓氏、电子邮件
这应该是:
成员编号:1
姓名:约翰
姓:多伊
电邮:test@email.com
提前感谢您的帮助。要完成基本相同的任务,您可以选择一个字段白名单,然后自己构建字段字符串
public function construct($conn,
$param_select = array('name', 'surname', 'email'),
$param_member_id)
{
$available_fields = array('name', 'surname', 'email');
$select_fields_array = array_intersect($param_select, $available_fields);
$select_fields = implode(", ", $select_fields_array);
$query_rs_this = $conn->prepare("SELECT $select_fields FROM members WHERE
member_id = :member_id
ORDER BY members.surname");
$query_rs_this->execute(array(':member_id' => $param_member_id));
$rs_this = $query_rs_this->fetch(PDO::FETCH_ASSOC);
$query_rs_this->closeCursor();
foreach($rs_this as $key => $value){
$this->$key = $value;
}
unset($key);
}
或
首先,不能绑定表
SELECT:SELECT
Add$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)代码>连接打开后,您将收到错误警报。我明白了。。。因此,我需要手动检查并编译一个列列表,以从我的DB中提取?Yep/Yep和Yep;-)Hmpf。感谢您的即时回复!我很感激。现在有个主意了!杰出的然而,当我读几百行,有很多列时,这不是会导致不必要的内存使用(以及时间延迟)吗?可能-只是将其修改为一种安全的方式来构建字段以选择自己。如果您添加了一个字段,您将不得不更改代码以允许它,但是性能方面应该更快,这是完美的,亲爱的先生。硬编码的可用字段是罚款由我。非常感谢。
public function construct($conn,
$param_select = array('name', 'surname', 'email'),
$param_member_id)
{
$query_rs_this = $conn->prepare("SELECT * FROM members WHERE
member_id = :member_id
ORDER BY members.surname");
$query_rs_this->execute(array(':member_id' => $param_member_id));
$rs_this = $query_rs_this->fetch(PDO::FETCH_ASSOC);
$query_rs_this->closeCursor();
foreach($rs_this as $item){
foreach($param_select as $field) {
$this->$field = $item[$field];
}
}
unset($key);
}