我试图将我的所有mysqli转换为PDO,但我对PDO非常环保并且我的问题可能是基本的。我在切换的第一个查询时遇到问题。
这是我的设置。在我的login.php中,我调用了这样的函数:
的login.php
log_ret[which(!is.finite(log_ret))] <- 0
log_ret
x y z s p t
2005-01-01 0.234 -0.012 0 0 0.454 0
我的功能页面加载了这个:
funcs.php
$user = attempt_login($username, $password);
然后引用给我所有错误的函数:
function attempt_login($username, $password) {
$user = find_user_by_username($username);
if ($user) {
if (password_check($password, $user["salt"], $user["password"])) {
...
}
和我的班级一起开始:
db_connection.php
function find_user_by_username($username) {
$db = new Database();
$db->dbc();
$sql = "SELECT * FROM users WHERE username = :usr";
$stmt = $db->prepare($sql); // *** this is line 157
$stmt->bindParam('usr', $username, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
数据库可以连接。我只是不想在我的函数中使用Globals,但我觉得错误意味着我在我的函数页面中需要一些globabls。这是错误:
class Database
{
private $dbc;
public function __construct()
{
try {
$db_host = ' '; // hostname
$db_name = ' '; // databasename
$db_user = ' '; // username
$db_pass = ' '; // password
$dbc = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $db_pass);
$dbc->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch (PDOException $err) {
$err->getMessage();
}
}
public function dbc()
{
return $this->dbc;
}
}
我的问题是,如果我把所有的功能都放在课堂上,或者我只是遗漏了一些简单的东西,我这样做是错误的吗?同样,我只想在我的函数中使用PDO并避免使用全局变量。
答案 0 :(得分:0)
$db->dbc();
这没有任何效果,因为您没有将返回值存储在变量中,然后使用此变量来调用prepare()。
您也不是将PDO对象存储在成员变量中,而是存储在构造函数方法中的局部变量中 - &gt;当构造函数存在时,它超出范围
由于你的数据库类什么都不做,只是将一些参数传递给PDO的构造函数 - 它没有冒犯 - 没用;并且班级&#34;没有&#34;顾名思义。我建议在这里使用dependency injection。