0

MYSQLに接続して情報を検索し、それをAPIに送信し、新しいテーブルに書き戻すための応答を取得するPHPコードを作成しました。

完全に機能する場合もあれば、機能しない場合もあります。そうでない場合は、このエラーが発生します

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , '', '', '')' at line 1

または、新しいテーブルに1つまたは2つのエントリを書き込んでから、別の行でエラーが発生する場合もあります。ああ、APIで同じデータを選択して検索して送信しても、機能する場合と機能しない場合があります(送信される文字列からすべてのコンマを削除して、発生する可能性のあるエラーを削減しましたカンマ付き。)

これがAPIまたは私のコードの問題であるかどうか疑問に思います。しばらくの間、それがどのように機能するかを理解できず、コードの問題で問題になり、APIの問題の可能性についての私の考えにつながります。

私の仮説は次のとおりです。

  1. 私が持っているAPIキーは機能が制限されているため、結果が制限されます。
  2. 応答に時間がかかるため、リクエストがタイムアウトになります。

これらのどちらかが意味がありますか?他のアイデアはありますか?

これが時々何かを取り戻すphpコードです:

時々それはエコーアウトします。しかし、そうでない場合もあります。関数$request->API関数phpで利用可能なものは何でも。

エラーをスローしているSQL行はこれに関係していると思います:

insertRow($db, $new_table, $Merchant, $ips, $scoreBeforeGeo, $geoFactor, $scoreAfterGeo, $category, $overall_protocol, $protocol_name);

function insertRow($db, $new_table, $Merchant, $ips, $scoreBefore, $geoFactor,      $scoreAfter, $category, $overall, $protocol)
{
   $insert = "INSERT INTO $new_table " . " VALUES('$Merchant', '$ips', $scoreBefore, $geoFactor, $scoreAfter, '$category', '$overall', '$protocol');";
$q = mysqli_query($db, $insert) || die(mysqli_error($db));
}

繰り返しますが、動作する場合と動作しない場合があります。

4

1 に答える 1

1

コードは、クエリへの入力をサニタイズしたり、パラメーターを介して渡したりすることはありません。これは、INSERTステートメントに渡されるデータにSQL構文として解釈される文字(アポストロフィなど)が含まれている場合、ステートメントを台無しにすることを意味します。 また、データを破壊したり、意図しないアクセスを提供したりする可能性もあります。 言い換えれば、それは起こるのを待っているSQLインジェクション攻撃です。

これを防ぐために、準備されたステートメントを使用してください。 http://php.net/manual/en/mysqli.prepare.php

于 2012-06-28T17:41:01.937 に答える