脚本没有填充MySQL数据库 - 我有语法错误吗?

时间:2014-08-22 15:09:01

标签: php android mysql

我试图通过从我的Android应用程序上传SQLite数据库的内容来填充MySQL数据库。但是,当我这样做时,MYSQL数据库不会被填充。

我试图用来填充的PHP脚本如下(注意用户名,密码等是故意遗漏,但绝对正确)。是否有语法错误或问题是什么?

<?php

if(isset($_GET['sessionId']) && isset($_GET['game']) && isset($_GET['name']) && isset($_GET['avgMed']) && isset($_GET['maxMed']) && isset($_GET['avgAttn']) && isset($_GET['maxAttn']) && isset($_GET['score']) && isset($_GET['date'])
 && isset($_GET['rawFile']) && isset($_GET['EEGFile']) && isset($_GET['medFile']) && isset($_GET['attFile']))
{

$mysql_host = "";
$mysql_database = "";
$mysql_user = "";
$mysql_password = "";


    // Provide host ip, mysql user name, password
    $con = mysql_connect($mysql_host,$mysql_user,$mysql_password);

    // Provide database name.
    mysql_select_db($mysql_database);

    $sessionId=$_GET['sessionId'];

    $game=$_GET['game'];

    $name=$_GET['name'];

    $avgMed=$_GET['avgMed'];

    $maxMed=$_GET['maxMed'];

    $avgAttn=$_GET['avgAttn'];

    $maxAttn=$_GET['maxAttn'];

    $score=$_GET['score'];

    $date=$_GET['date'];

    $rawFile=$_GET['rawFile'];

    $EEGFile=$_GET['EEGFile'];

    $medFile=$_GET['medFile'];

    $attFile=$_GET['attFile'];

    $flag="false";


    if(!empty($game) && !empty($name) && !empty($date) && !empty($sessionId))
    {
        $sql="Insert into `GameDetails` (`SessionID`,`Game`,`Username`,`AvgMeditation`,`MaxMeditation',`AvgAttention` ,`MaxAttention`,`Score`,`Date`,`RawFile' ,`EEGFile', `MedFile', `AttFile') values 
        ('$sessionId','$game','$name','$avgMed','$maxMed','$avgAttn','$maxAttn','$score','$date','$rawFile','$EEGFile','$medFile','$attFile') ";

        $result=mysql_query($sql);

        if($result)
        {
            $count= mysql_affected_rows();
            if($count > 0)
            {
                $flag="true"; //result true 

            }               

        }

        mysql_close($con);  

        echo json_encode(array("result"=>$flag));
    }
}

?>  

我最近也在phpMyAdmin中更改了MySQL数据库并添加了四个新列,但我确信它们在脚本中被正确引用。

1 个答案:

答案 0 :(得分:6)

你有多个拼写错误:

  [...snip...],`Date`,`RawFile' ,`EEGFile', `MedFile', `AttFile') values 
                              ^----------^----------^----------^--- here

这些应该是反引号(`),而不是'单引号。

如果您的脚本中有任何类型的错误处理,那么您已经被告知语法错误:

$result=mysql_query($sql) or die(mysql_error());
                         ^^^^^^^^^^^^^^^^^^^^^^

最重要的是,您很容易受到sql injection attacks的攻击,因此这个查询无法正常工作,因为您的语法错误会阻止任何注入攻击的发生他是第一名。

永远不会假设在处理外部资源时取得成功,例如:一个数据库。总是假设失败,并将成功视为一个惊喜。对于查询来说,确切地说有一种方法可以成功,并且几乎有无数的理由让它们失败。