尝试在PHP和MySQLi中启动一个函数,如果用户被激活(1)则返回TRUE,或者FALSE是用户未被激活(0)。
我已经测试了这些代码并且没有运气,导致MySQLi错误。请记住,我是MySQLi的新手。
function get_activated($mysqli, $userid) {
$row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
if($row){
$activated = TRUE;
return $activated;
}
}
function get_activated($mysqli) {
$row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
if($row){
$activated = TRUE;
return $activated;
}
}
function get_activated($mysqli, $userid) {
if(isset($_SESSION['userid'])) {
$userid = $_SESSION['userid'];
$row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
if($row){
$activated = TRUE;
return $activated;
}
}
}
function get_activated($mysqli) {
if(isset($_SESSION['userid'])) {
$userid = $_SESSION['userid'];
$row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array();
return $row["activated"];
}
}
我正在调用这样的函数:
get_activated($userid);
echo $activated;
exit();
get_activated();
echo $row['activated'];
exit();
如果有人能指出我在正确的轨道上,我会非常感激,谢谢!
错误示例:
get_activated()缺少参数2 在非对象上调用成员函数query() 只应通过引用传递变量 缺少get_activated()
的参数1答案 0 :(得分:1)
我认为你正在寻找类似的东西:
function get_activated($mysqli, $userid) {
$row = $mysqli->query("SELECT * FROM users WHERE userid = '$userid' AND activated = '1'")->fetch_array();
if(!empty($row)){
return true;
}
return false;
}
fetch_array()方法是MySQLi如果没有找到任何行就会返回null,我只是喜欢使用空,如果你有扩展的MySQLi并且以某种方式改变了功能 - 我在意外之前就已经这样做了。
当你再调用这个函数时,你应该使用 -
$activated = get_activate($mysqli,1);
var_dump($activated);
另一方面,我会一直使用准备好的陈述,但这不是针对这个问题的。
答案 1 :(得分:1)
因此,让我们逐一采取这些
function get_activated($mysqli, $userid) {
$row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
if($row){
$activated = TRUE;
return $activated;
}
}
因此注入mysqli
类的+1,但您只关注查询是否成功。请记住,查询可以成功并返回0行。如果查询成功,您还只能return
。您应该在成功时返回true
,而false
则不会成功。
功能#2令人困惑,因为它省略了$userid
并遇到了同样的问题。
function get_activated($mysqli, $userid) {
if(isset($_SESSION['userid'])) {
$userid = $_SESSION['userid'];
$row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array();
if($row){
$activated = TRUE;
return $activated;
}
}
}
所以现在我们有$_SESSION
个值,但仍然传递$userid
作为参数(这令人困惑)。然后我们查看query
是否返回任何值。这样做会更好,但将query
链接到fetch_*
是一种不好的形式,因为如果查询失败,则会出现致命错误。
function get_activated($mysqli) {
if(isset($_SESSION['userid'])) {
$userid = $_SESSION['userid'];
$row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array();
return $row["activated"];
}
}
同样的问题$userid
为#3和链接相同的问题,但我们更接近,因为我们至少会返回一个值。但是,同样,如果查询返回0行,它也不会考虑会发生什么。
让我们写一个现在有效的完整功能
function get_activated($mysqli, $userid) {
$uid = $mysqli->real_escape_string($userid);
$result = $mysqli->query("SELECT * FROM users WHERE userid = " . $uid . " AND activated = '1'");
$data = $result->fetch_assoc();
return ($data) ? true : false;
}
所以,首先我们清理$userid
。然后我们对它进行查询。然后,我们寻找一个返回的行,如果我们做了或者没有,我们返回一个布尔值。现在我们可以像这样使用它
if(get_activated($mysqli, $userid)) {
echo 'Activated';
} else {
echo 'Not activated';
}