【问题标题】:PHP Function with MySQL Query output带有 MySQL 查询输出的 PHP 函数
【发布时间】:2016-02-23 18:45:50
【问题描述】:
// Sum of boys and girls for each school 

function bgTotSkl($bgTotSkl_SchoolName, $conn) {
    $bgTotSkl_Query = "SELECT SUM(result_studpoints) AS totalbg, stud_gender
    FROM result
    JOIN students ON result.stud_id WHERE result.stud_id = students.stud_id
    AND stud_school = '$bgTotSkl_SchoolName' 
    GROUP BY stud_gender";
    $mainQuery = mysqli_query($conn, $bgTotSkl_Query);
while ($data = mysqli_fetch_assoc($mainQuery)) {
echo bgTotSkl($bgTotSkl_SchoolName);
    }
}

echo bgTotSkl("CCA");

上面的代码是一个包含mysql查询的函数。该查询应该计算我数据库中特定学校获得的男孩和女孩的总分。查询效果很好,我已经测试过了。

我查询中的变量也代表学校名称,所以当我想输出特定学校的总数时 例如:

echo bgTotSkl("CCA");

学校CCA将被放置在函数中,查询将从数据库中获取特定学校CCA的男孩和女孩的总分。

问题是我无法获得输出查询结果的函数,而且我不知道我的语法是否错误(我是否正确地在查询中实现了变量?)或整个逻辑错误(是 while循环完全错误?)或两者兼而有之。

提前致谢。

【问题讨论】:

  • 警告:使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您将创建严重的SQL injection bugs从不$_POST数据直接放入查询中。
  • 注意:使用 PHP 数据库对象 PDO
  • 也叫echo bgTotSkl("CCA",$conn);connection object is missing there

标签: php mysql function output


【解决方案1】:

两点:-

1.在function里面先添加这两行:-

if(isset($bgTotSkl_SchoolName)){
 $bgTotSkl_SchoolName = mysqli_real_escape_string($conn,$bgTotSkl_SchoolName);//It will prevent `SQL Injection`
}

2.调用函数如:-echo bgTotSkl("CCA",$conn); connection object(second parameter) is missing there

现在尝试如下:-

function bgTotSkl($bgTotSkl_SchoolName, $conn) {
    $bgTotSkl_Query = "SELECT SUM(result_studpoints) AS totalbg, stud_gender
    FROM result
    JOIN students ON result.stud_id WHERE result.stud_id = students.stud_id
    AND stud_school = '$bgTotSkl_SchoolName' 
    GROUP BY stud_gender";
    $mainQuery = mysqli_query($conn, $bgTotSkl_Query);
    while ($data = mysqli_fetch_assoc($mainQuery)) {
        echo $data['stud_gender'].' has gained overall '.$data['totalbg'].'points';
    }
}

bgTotSkl("CCA",$conn);

或者:-

function bgTotSkl($bgTotSkl_SchoolName, $conn) {
$result = array();
    $bgTotSkl_Query = "SELECT SUM(result_studpoints) AS totalbg, stud_gender
    FROM result
    JOIN students ON result.stud_id WHERE result.stud_id = students.stud_id
    AND stud_school = '$bgTotSkl_SchoolName' 
    GROUP BY stud_gender";
    $mainQuery = mysqli_query($conn, $bgTotSkl_Query);
    while ($data = mysqli_fetch_assoc($mainQuery)) {
        $result['stud_gender'] = $data['totalbg'];
    }
}
$college_name = 'CCA';
$data = bgTotSkl($college_name,$conn);

foreach($data as $key=>$value){
   echo $key.' of college '.$college_name.' has gained overall '.$value.'points';
}

【讨论】:

  • 谢谢你的回答,我已经这样做了,但它仍然没有输出任何东西。
  • 你认为我的函数中的while循环可能有问题吗?
  • 我不知道,因为我不知道这是要做什么:- bgTotSkl($bgTotSkl_SchoolName);
  • 我认为那条线是问题所在。我只是想输出但是我不知道如何输出包含mysql查询的函数。
  • 那行 bgTotSkl($bgTotSkl_SchoolName);什么都不做,我以为它会做点什么。
【解决方案2】:

这里是mysqli准备语句的简单教程:http://markonphp.com/mysqli-select-prepared-statements/

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多