所以我在编程方面不太好,但我试图登录我的网站。我已经研究了一下,PDO应该是最安全的调用mySQL查询。
问题是我无法得到它。我创建了一个函数并得到了这2个错误。 首先可能与functions.php中的另一个函数有关,但我不确定原因。 我已经读过关于第二个的东西,但没有得到我应该做的。
错误:
1:警告:缺少userData()的参数1,在page.php中调用 第34行并在第164行的functions.php中定义
2:致命错误:在非对象上调用成员函数prepare() 第165行的functions.php
这是我试图运行的功能
function userData(){
if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? LIMIT 1")) {
$stmt->bind_param('s', $_SESSION['username']);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($username);
$fetch_stmt=$stmt->fetch();
if ($stmt->num_rows == 1) {
$username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
$_SESSION['username'] = $username;
$email=$fetch_stmt['email'];
return array($username,$email);
} else {
return false;
}
}
}
此函数应从数据库返回一组用户数据。
答案 0 :(得分:1)
首先,正如我在评论中已经提到的那样,您使用mysqli而不是PDO。
但它与你的错误没有任何关系。
不确定缺少的参数错误,但似乎你在userData
中定义了一个参数,但是在没有参数的情况下调用它。
第二个错误是关于variable scope。您的连接处理程序$mysqli
在函数userData
中未定义,因为它尝试查找本地变量$mysqli
并失败。您必须将函数内部的处理程序作为参数传递,或者以某种方式重构代码,以便从其他位置获取处理程序。
答案 1 :(得分:0)
试一试,看看是否有帮助:
<?php
//DATABASE CONNECTION CONFIGURATION:
defined("HOST") or define("HOST", "localhost"); //REPLACE WITH YOUR DB-HOST
defined("DBASE") or define("DBASE", "_TEST_"); //REPLACE WITH YOUR DB NAME
defined("USER") or define("USER", "root"); //REPLACE WITH YOUR DB-USER
defined("PASS") or define("PASS", "root"); //REPLACE WITH YOUR DB-PASS
function getUserData(){
$dbh = new PDO('mysql:host='.HOST.';dbname='. DBASE,USER,PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare("SELECT * FROM users WHERE username = :uName LIMIT 1");
$stmt->bindParam(':uName', $_SESSION['username']);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_OBJ);
//YOU MAY JUST RETURN $result & ACCESS ALL DATA IN IT USING OBJECTION ORIENTATED APPROACH LIKE: $email = $result->email;
if(!empty($result)){
//return array($_SESSION['username'], $result->$result->email);
return $result;
}
return null;
}