0

我对 INSERT 查询有疑问。

这是问题所在:
昨天我正在使用此代码上传数据,它工作正常。今天,当我在表单上点击提交时,它只显示一个空白页面。没有错误,只是空白。错误日志中没有任何内容。所有 SELECT 查询都工作正常,因此 SELECT Count(id) 查询仍然有效。

这是我尝试过的:

  • 重新上传到服务器
  • 语法调整,例如 '".$v.'" 而不是 '$v'
  • 添加打印行以检查所有变量是否为空。一切都好,所有数据都出现在 INSERT 查询之前。
  • 通过我的管理员 PHP 测试插入,一切正常
  • 函数调用是正确的 - 从昨天开始并保持不变

该函数获取物种、科和属的列表,然后将它们添加到数据库中。这是代码(未经处理的版本 - 昨天都在工作):

error_reporting(E_ALL);
ini_set('display_errors', '1');




    function submit($family, $genus, $species){


        //require statement
        require 'databaseConnect.php';

        //get num of species
        if(!($result = mysql_query("SELECT Count(id) as num FROM speciesList", $connection))) mysql_error();
            $nums = mysql_fetch_row($result);
            $num=$nums[0];

        //parse species 
        $holder="";
        $array = Array();

        while(strlen($species)!=0){
            if($species[0]==';'){
                $array[] = $holder;
                $holder="";
            }else{
            $holder = $holder . $species[0];

            }

            $species=substr($species, 1);

        }

        foreach($array as $v){
            $num++;
            if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
                mysql_error();
            }else{
                print "success ";
            }
        }
        mysql_close($connection);
    }

非常感谢您,这个问题对我来说相当神秘!恩

4

2 回答 2

1

您永远不想使用带参数的字符串替换来构建 SQL 语句,因为这会使您容易受到 SQL 注入攻击。相反,绑定您的参数。

您的代码没有返回错误,因为您调用mysql_error()并忽略了返回值。它返回错误字符串,因此您希望您的代码更像这样:

if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
    print_r( mysql_error() );
}else{
    print "success ";
}

如果您在看到错误后需要帮助来理解错误,请在此处发布。

于 2012-12-30T18:10:16.760 回答
0
 if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
               echo mysql_error();
            }else{

可能还有其他问题,但 mysql_error() 函数返回一个字符串。您的脚本需要采取一些措施来显示字符串。

我发现这样做的更好方法是分别构造变量,以便显示它们。而且我不确定您是否想要$v 之前的那个点。看看这对你是否有意义。

foreach($array as $v)
{
    $num++;
    $sql = "INSERT INTO speciesList VALUES($num, '$family', '$genus', '$v')";
    $res = mysql_query($sql);
    if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error());
    echo "<br/>SUCCESS: $sql";
}
于 2012-12-30T18:10:42.310 回答