很长一段时间以来,我一直在使用包装类来实现数据库功能。几年前,我对其进行了升级,以使用mysqli_
而不是已贬值的mysql_
函数,该函数使网站在PHP版本升级时完美地超越了。
在对包装程序进行了最近的升级时,我编写了一个类,可以从多数组中编写准备好的statemtnt,以使事情保持整洁。
这就是我做到的方式。
index.php -测试文件
/* Set Parameters
i - integer
d - double
s - string
b - BLOB
*/
$params = array(
array('s' => $_GET["id"]),
array('i' => $_GET["two"])
);
$db->prepare("INSERT INTO `".$db->prefix."articles` SET `categoryID`= ? , `articleID`= ? ");
$select2 = $db->execute($params);
$db->close();
您还可以使用其他数据集重置$params
数组,然后再次$db->execute($params)
插入另一行。
database.class.php
function prepare($sql) {
$this->last_query = $sql; //Save query to show later on.
$this->stmt = $this->conn->prepare($sql);
}
function close() {
$this->stmt->close();
}
function execute($params) {
$ident = '';
$parameters = '';
$vars = array();
if($this->stmt) {
foreach($params as $k => $v) {
foreach($v as $a => $b) {
$ident .= $a;
$vars[] .= $b;
$parameters .= $a.' => '.$b.'<br>'; // For MySQL error reporting
}
}
$this->stmt->bind_param( $ident , ...$vars );
$this->parameters = $parameters;
$this->stmt->execute();
$result = $this->stmt->get_result();
return $result;
}
else {
if($this->conn->error) {
$this->last_error = $this->conn->error;
$sql = trim(preg_replace('/\s+/', ' ', $sql));
$this->log_error("MySQL",$this->last_error." ☼ ".$sql);
}
}
//$data = $result->fetch_all();
}
我的问题是:
我会让它减慢速度吗?
谁能提出更好的解决方案并使它保持整洁?我喜欢将信息排列在数组中的简洁性;并不是说这是最好的解决方案,但是它确实有效。我还没有找到一种使事情完全井井有条的好方法。
您看到这条路线有什么下降吗?
我工作的网站都将运行PHP 7.0(或者至少是PHP 5.7,直到我可以将它们升级到较新的版本为止)。