在SQL中求和并使用PHP将其保存到SQL中的另一个表中?

在SQL中求和并使用PHP将其保存到SQL中的另一个表中?,php,mysql,sum,insert-into,Php,Mysql,Sum,Insert Into,嗨,我在这个网站上搜索了很多帮助,但是搜索得越多,我就越困惑 我有一个表的竞争,其中有场IDprimary key Player*TeamName*3名球员在一个队和记分员 等等 我已经成功地在SQL中求和,如下所示: $result1 = mysql_query("SELECT SUM(Score) AS team1 FROM competition WHERE TeamName='team1' "); 我试图将变量$team1保存到名为TeamCompetition的新表中,其中一个团队的

嗨,我在这个网站上搜索了很多帮助,但是搜索得越多,我就越困惑

我有一个表的竞争,其中有场IDprimary key Player*TeamName*3名球员在一个队和记分员

等等

我已经成功地在SQL中求和,如下所示:

$result1 = mysql_query("SELECT SUM(Score) AS team1 FROM competition WHERE TeamName='team1' ");
我试图将变量$team1保存到名为TeamCompetition的新表中,其中一个团队的总和被保存为一个带有团队名称的数字

$row1= mysql_fetch_array($result1);

$team1= $row1['team1'];

$sql1=("INSERT INTO TeamCompetition (TeamScore)
        VALUES '$_POST[team1]' 
        WHERE TeamName='team1' ");
但这是行不通的,有谁能建议我如何处理这段代码,或者有没有其他更优雅的方法来解决它?
如果我在没有$sql1的情况下回显它,它会显示结果为什么我不能保存它…?

解决SQL语法问题的基本方法是:

$sql1=("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES ('".$_POST[team1]."','team1'");
由于数据库中当前没有包含teamname的行,您应该创建它。另外,请注意$\u POST是一个数组,在经过评估的脚本中处理得不好

但是,我假设您希望在获得分数时更新此项:

$sql1=("UPDATE TeamCompetition set TeamScore = '".$_POST[team1]."'
    WHERE TeamName = 'team1'");
但MySQL中有一个巧妙的技巧,即功能:

然而,有一件事我不能相信:这段代码散发着SQL注入的气味

要么使用通常最好的解决方案 和/或不使用来自不可信或易于操作的数据源的任何数据,而不进行验证,并正确处理这些数据。这是一个更糟糕的解决方案,但总比没有好 只要这些函数仍然受支持,就可以使用最省力的代码保护,正如令人敬畏的NullPointer所指出的,但是,整个代码都将被弃用,因此不应将其用于新的开发:

$sql1=("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES ('".mysql_real_escape_string($_POST[team1])."','team1'
    ON DUPLICATE KEY UPDATE TeamScore = '".$_POST[team1]."'" );
因此,如果您必须修补旧代码,这种情况将继续下去,您可以决定使用它,但只有在评估使用PDO的可能性之后!如果使用PDO的可能性很小,那么这就是PHP PDO文档提供的方法:

<?php
try {
    //open connection, this is different than in the old functions
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    //***running query
    //**step1: create statement
    $stmt = $dbh->prepare("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES (:teamScore,:teamName)
    ON DUPLICATE KEY UPDATE TeamScore = :teamScore "); //notice parameters prefixed with ':'

    //**step2: bind values
    $stmt->bindValue(':teamScore', $_POST[team1]);
    $stmt->bindValue(':teamName', 'team1');

    //**step3: exexcute statement
    $stmt->execute();

    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?> 

SQL语法问题的基本解决方案是:

$sql1=("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES ('".$_POST[team1]."','team1'");
由于数据库中当前没有包含teamname的行,您应该创建它。另外,请注意$\u POST是一个数组,在经过评估的脚本中处理得不好

但是,我假设您希望在获得分数时更新此项:

$sql1=("UPDATE TeamCompetition set TeamScore = '".$_POST[team1]."'
    WHERE TeamName = 'team1'");
但MySQL中有一个巧妙的技巧,即功能:

然而,有一件事我不能相信:这段代码散发着SQL注入的气味

要么使用通常最好的解决方案 和/或不使用来自不可信或易于操作的数据源的任何数据,而不进行验证,并正确处理这些数据。这是一个更糟糕的解决方案,但总比没有好 只要这些函数仍然受支持,就可以使用最省力的代码保护,正如令人敬畏的NullPointer所指出的,但是,整个代码都将被弃用,因此不应将其用于新的开发:

$sql1=("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES ('".mysql_real_escape_string($_POST[team1])."','team1'
    ON DUPLICATE KEY UPDATE TeamScore = '".$_POST[team1]."'" );
因此,如果您必须修补旧代码,这种情况将继续下去,您可以决定使用它,但只有在评估使用PDO的可能性之后!如果使用PDO的可能性很小,那么这就是PHP PDO文档提供的方法:

<?php
try {
    //open connection, this is different than in the old functions
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    //***running query
    //**step1: create statement
    $stmt = $dbh->prepare("INSERT INTO TeamCompetition (TeamScore, TeamName)
    VALUES (:teamScore,:teamName)
    ON DUPLICATE KEY UPDATE TeamScore = :teamScore "); //notice parameters prefixed with ':'

    //**step2: bind values
    $stmt->bindValue(':teamScore', $_POST[team1]);
    $stmt->bindValue(':teamName', 'team1');

    //**step3: exexcute statement
    $stmt->execute();

    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?> 

你可以在一次家禽猛扑中完成这一切。根本不需要通过PHP传递信息

INSERT INTO TeamCompetition (TeamName, TeamScore) VALUES (SELECT TeamName, SUM(Score) FROM competition GROUP BY TeamName)
您需要验证输入,并且您的代码可以检查

。它们不再得到维护。而是学习,并使用或


你可以在一次家禽猛扑中完成这一切。根本不需要通过PHP传递信息

INSERT INTO TeamCompetition (TeamName, TeamScore) VALUES (SELECT TeamName, SUM(Score) FROM competition GROUP BY TeamName)
您需要验证输入,并且您的代码可以检查

。它们不再得到维护。而是学习,并使用或


您的代码已为sql注入打开,您需要从用户处转义所有请求。。您使用的是过时的api Mysql_uu,因此使用pd或mysqli或IMO仅使用pdo检查您是否需要计算特定团队的团队分数,还是可以一次性完成?如果后者是@sjdaws,那么答案是好的,否则ppeterka有一个针对个人插入/更新的解决方案。我曾经尝试过一个团队一个团队地完成,现在对我来说一切都变得模糊了,我现在正在测试所有这些代码,我会告诉您,如果有更好的解决方案,我们不需要逐个测试。您的代码是开放的,可以进行sql注入,您需要从用户那里转义所有请求。。您使用的是过时的api Mysql_uu,因此使用pd或mysqli或IMO仅使用pdo检查您是否需要计算特定团队的团队分数,还是可以一次性完成?如果后者是@sjdaws,那么答案是好的,否则ppeterka有一个针对个人插入/更新的解决方案。我曾经尝试过一个团队一个团队地完成,现在对我来说一切都变得模糊了,我现在正在测试所有这些代码,我会告诉你,如果有更好的解决方案,wentIt不需要逐一测试。FYI mysql_*函数已弃用,不再由社区维护。。。。另外,pho>=5.5的新版本将不支持它们,并显示E_已弃用error@NullPointer我想最后两个片段,不再是。。。抱歉,如果不清楚的话,我的观点是——因为OP在这些方面似乎不是很老练——提供一个
关于这些问题的详细、一步一步的解释。我本可以做一个“这里是codez”的方法,但我通常不觉得这有建设性。。。我是一个sllllow打字机,所以所有的事情都需要一段时间才能写下来谢谢你的回答,但我迷失在代码中,谢谢你的时间和努力。仅供参考,mysql_*函数已被弃用,不再由社区维护。。。。另外,pho>=5.5的新版本将不支持它们,并显示E_已弃用error@NullPointer我想最后两个片段,不再是。。。抱歉,如果不清楚的话,我的观点是——因为OP在这些方面似乎不是很老练——提供关于这些问题的详细、一步一步的解释。我本可以做一个“这里是codez”的方法,但我通常不觉得这有建设性。。。我是一个SLLLOW打字机,所以所有的事情都需要一段时间才能写下来谢谢你的答案,但我迷失在代码中,谢谢你的时间和努力。插入到TeamCompetition TeamName,TeamScore选择TeamName,SUMScore从竞争组中逐个TeamName;但没有价值观,quick an easy Perfect+1插入TeamCompetition TeamName,TeamScore选择TeamName,SUMScore按TeamName从竞争组中选择;但如果没有价值观,快速和容易获得+1