gpt4 book ai didi

php - 用于数据检索的可变变量?

转载 作者:行者123 更新时间:2023-11-28 23:56:11 25 4
gpt4 key购买 nike

首先,自从大约一年前开始涉足 php 以来,我一直是 stackoverflow 的狂热读者。通常可以找到大多数问题的答案,但很难解决这个问题。

我读过很多强烈反对在 php 中使用可变变量的帖子,以至于普遍的共识似乎是像避免瘟疫一样避免使用它们。虽然我知道某些情况可能会打开安全漏洞,但我需要了解在以下 MySQL 数据检索上下文中使用它们有什么影响(如果有的话)。

除其他事项外,我的网络应用程序处理大量不同的客户调查问卷,其中包含大量问题。下面给出了数据库结构和问卷类的示例片段来说明我的问题(为清楚起见,删除了所有不相关的代码)。所有 MySQL 字段和类属性都具有相同的命名约定。

我的代码非常有效,但我需要有人告诉我为什么我不应该使用它!

数据库:

CREATE TABLE `history` (
`historyID` int(11) NOT NULL AUTO_INCREMENT,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`clientID` int(11) NOT NULL,
`q1` varchar(500) DEFAULT NULL,
`q2` varchar(500) DEFAULT NULL,
`q3` varchar(500) DEFAULT NULL,
`q4` varchar(500) DEFAULT NULL,

//..all the way to..

`q90` varchar(500) DEFAULT NULL,
PRIMARY KEY (`historyID`),
KEY `clientID` (`clientID`),
CONSTRAINT `childdevq_ibfk_1` FOREIGN KEY (`clientID`) REFERENCES `client` (`clientID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=latin1

php 类:

class history {

private $db; // MySQL db object

public $historyID;
public $created;
public $clientID;
public $q1;
public $q2;
public $q3;
public $q4;

//..all the way to..

public $q90;

public function __construct($db){
$this->db = $db;
}

private function populateFields($row){
foreach ($row as $field=>$value){
$this->{$field} = htmlspecialchars($value);
}
}

public function getHistory($historyID){
$sql = "SELECT * FROM history WHERE historyID = {$historyID};";
$result = $this->db->query($sql);
if ($result->num_rows){
$row = $result->fetch_array();
$this->populateFields($row);
return 'success';
} else {
return 'no results';
}
}
}

替代方案是:

    private function populateFields($row){
$this->historyID = htmlspecialchars($row['historyID']);
$this->clientID = htmlspecialchars($row['clientID']);
$this->q1 = htmlspecialchars($row['q1']);
$this->q2 = htmlspecialchars($row['q2']);
$this->q3 = htmlspecialchars($row['q3']);
$this->q4 = htmlspecialchars($row['q4']);

//..all the way to..

$this->q90 = htmlspecialchars($row['q90']);
}

...这似乎有很多不必要的代码。我只是懒惰吗?

不管怎么说,我不假装是一个完全的业余爱好者,所以请好好撕碎我! :-)

最佳答案

正如我的评论(和@Random 的)所建议的,为什么不将您的 q 存储为一个数组,这里有一些示例代码我为您提供了一个想法

private function populateFields($row)
{
foreach ($row as $key => $value) {
if(substr($key, 0, 1) === 'q')
$index = substr($key, 1);
$this->q[$index] = htmlspecialchars($value);
} else {
$this->$key = htmlspecialchars($value);
}
}
}

// Later when you want to see what is in q
foreach ($this->q as $index => $value) {
// your q number
echo $index;
}

作为旁注,如果您将数据库设计成这样,那么更好的方法是使用一个表来保存针对带有连接的问卷的问题。如果不是你设计的 table ,找出是谁设计的,然后射杀他们 ;)

关于php - 用于数据检索的可变变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com