0

INSERT クエリに問題があります。

問題は次のとおりです。
昨日、このコードを使用してデータをアップロードしましたが、問題なく動作していました。今日、フォームで送信を押すと、空白のページが表示されます。エラーはありません。空白です。エラーログには何もありません。すべての SELECT クエリは正常に機能しているため、SELECT Count(id) クエリは引き続き機能します。

これが私が試したことです:

  • サーバーへの再アップロード
  • '$v' の代わりに '".$v.'" などの構文調整
  • 印刷行を追加して、どの変数も null でないことを確認します。すべて問題ありません。すべてのデータが 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 に答える