这是我当前的数据库类:
class Database {
private $db;
function Connect() {
$db_host = "localhost";
$db_name = "database1";
$db_user = "root";
$db_pass = "root";
try {
$this->db = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_name, $db_user, $db_pass);
} catch(PDOException $e) {
die($e);
}
}
public function getColumn($tableName, $unknownColumnName, $columnOneName, $columnOneValue, $columnTwoName = "1", $columnTwoValue = "1") {
$stmt = $this->db->query("SELECT $tableName FROM $unknownColumnName WHERE $columnOneName='$columnOneValue' AND $columnTwoName='$columnTwoValue'");
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $results[0][$unknownColumnName];
}
}
我尝试使用以下代码运行它:
$db = new Database();
$db->Connect();
echo $db->getColumn("Sessions", "token", "uid", 1);
我收到以下错误:
PHP 致命错误:在第 19 行 /Users/RETRACTED/RETRACTED/root/includes/Database.php 中的非对象上调用成员函数 fetchAll()
知道怎么回事吗?谢谢
-
该函数容易出现SQL注入.
-
此函数不会让您使用最简单的 OR 条件获得列.
-
该函数使 SQL 语言中几乎自然的英语变成难以阅读的乱码.
看,你甚至在写这个函数时都把自己宠坏了。您认为它如何用于日常编码?事实上,这个功能让你的体验harder与原始 PDO 相比 - 您必须学习所有新语法、大量例外和最后一刻的更正。
请返回原始 PDO!
让我告诉你正确的方法
public function getColumn($sql, $params)
{
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetchColumn();
}
像这样使用
echo $db->getColumn("SELECT token FROM Sessions WHERE uid = ?", array(1));
这样您就可以使用SQL 的全部功能不限于愚蠢的子集,以及准备好的报表的安全性,但要保持代码易于理解。
虽然仍称其为排成一行- 这是你最初的(而且非常正确的!)意图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)