【问题标题】:Queries in php file are not workingphp文件中的查询不起作用
【发布时间】:2014-05-13 12:38:35
【问题描述】:

我的functions.php 文件中有几个函数。我想向函数添加查询,但是当我这样做时,它不起作用。它只是不显示查询的结果。当我将查询添加到主页并包含该功能时,它确实有效。

我包含了配置文件,所以这不是问题。我也想到了作用域,所以在函数里面加了GLOBAL $mysqli;,但是还是不行。知道这里有什么问题吗?我宁愿在函数中包含查询,这样我就不必将它们添加到主页。

我的功能:

function friends($friendship) {

    GLOBAL $mysqli;

    $friendship = mysqli_query($mysqli,"SELECT * FROM friends WHERE friend_one = '$my_username' OR friend_one = '$username' 
    AND friend_two = '$username' OR friend_two = '$my_username' 
    AND invite_sent = 1 AND invite_accepted = 1 ");

    if (mysqli_num_rows($friendship) == 1){
          return true;
      } else { 
          return false; 
      }

}

这是检查我是否与某人成为朋友的部分。

<?php if (friends($friendship) == true) : ?> 
We are friends hooray!
<?php endif; ?>

编辑 #1 - 合并 主页面的代码和函数结合后的样子是这样的:

function friends($friendship) {

    $user_id = $_SESSION['user_id'];
    //Zoek de username op van ingelogde user
    $stmt = $mysqli->prepare("SELECT username, email FROM members WHERE user_id = ? ");
    $stmt->bind_param('i', $user_id); 
    $stmt->execute();  
    $stmt->store_result();
    $stmt->bind_result($my_username, $my_email);
    $stmt->fetch();
    $stmt->close();

    $username = $_GET["username"];
    //Zoek de gebruiker en zijn/haar gegevens in de db
    $stmt = $mysqli->prepare("SELECT user_id, gender, email, protected FROM members WHERE username = ? ");
    $stmt->bind_param('s', $username); 
    $stmt->execute();  
    $stmt->store_result();
    $stmt->bind_result($userid, $gender, $email, $protected);
    $stmt->fetch();
    $stmt->close();

    $friendship = mysqli_query($mysqli,"SELECT * FROM friends WHERE friend_one = '$my_username' OR friend_one = '$username' 
    AND friend_two = '$username' OR friend_two = '$my_username' 
    AND invite_sent = 1 AND invite_accepted = 1 ");

    if (mysqli_num_rows($friendship) == 1){

          return true;

      } else { 

          return false; 

      }

}

【问题讨论】:

  • 那你的错误是什么?或究竟是什么不起作用?
  • 不要使用全局。请。只是不要。不要这样做。甚至不要考虑尝试使用全局。
  • 在查询语句中声明了一堆变量,没有一个显示你是如何创建的。查询可能因此而失败。
  • 你正在使用$my_username,你没有在这个函数中定义。
  • @NiettheDarkAbsol 还有$username

标签: php mysqli scope


【解决方案1】:

如何确保查询中的所有变量都可用?

function friends($friendship, $my_username, $username) {
    //Added $my_username, $username to the function call 
    //since they are on the main page but not declared in the function otherwise

    GLOBAL $mysqli;

    $friendship = mysqli_query($mysqli, "SELECT * FROM friends WHERE (friend_one = '$my_username' OR friend_one = '$username') 
AND (friend_two = '$username' OR friend_two = '$my_username') 
AND (invite_sent = 1 AND invite_accepted = 1)") or die(mysqli_error($mysqli));  //Throw an error if the query fails

    if (mysqli_num_rows($friendship) == 1){
        return true;
    } else { 
        return false; 
    }
}

我还要注意不要使用 GLOBAL,并且我会添加一些错误检查来帮助诊断问题。

<?php 
    //Add the variables here as well...
    $friends = friends($friendship, $my_username, $username);

    if($friends == true)
        echo 'We are friends hooray!';
    } else {
        //Do something?
    };
?>

【讨论】:

  • 应该添加括号而不是评估 AND / OR 组合错误
  • 我已经编辑了我的帖子,看看它的底部。就像我说的,我以前从未在函数中使用过查询。不知道我做对了还是错了,但还是不行,
  • @user3512502 您必须将变量、$my_username 和 $username 从您的主页传递给函数。请参阅我的更新答案。
  • @Jason 干杯! GLOBAL $mysqli 的任何修复/提示?
【解决方案2】:

对于您的函数将使用的所有变量,例如本例中的 $my_username,您必须在函数内声明和初始化它们,或者像 @jason 所描述的那样以参数的形式将它们传递给该函数在答案中。

这些查询在您的主页上运行的原因是您的代码(查询)能够访问变量,因为它们是在特定范围内定义的。

由于“friends”这个函数不知道 $my_username 是什么,您只需要在这个函数中定义变量或以参数的形式传递它们。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2014-03-20
    • 2014-12-09
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多