1

これは私のSQLコードです。同じコードを何度も実行しましたが、問題はありませんでしたが、今日または何らかの理由で問題が発生しました。

mysqli_query($con, "
    INSERT INTO 'u_visits'
        ('ip_adress','dates')
    VALUES
        ('$ip',now())
    ON DUPLICATE KEY UPDATE visits = visits + 1
");
mysqli_close($con);

日付行が 0000-00-00 00:00:00 として追加されることを除いて、すべて正常に動作します

ここに私がIPアドレスを取得する方法があります:

//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
    //Is it a proxy address
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

$ip = ip2long($ip);
4

2 に答える 2

0

次のようなものはどうですか:

INSERT INTO `u_visits` (`ip_address`,`dates`) 
VALUES (
        '$ip', CONCAT(CURDATE(), ' ', CURTIME() )
       )
       ON DUPLICATE KEY UPDATE visits = visits +1

現状では広く開かれているため、適切な SQL インジェクション防止のためにバインドされたパラメーターを調べる必要があります。

'個人的には、バッククォート (`) を使用してテーブル名/列名をテーブルとして割り当てるのではなく、文字列ジレマを使用しているため、クエリが失敗していると思います。そのため、MySQL は必要な名前をテーブル名/列ではなく文字列として反復しようとしている可能性があります

于 2013-09-01T00:09:33.567 に答える
0

明示的に設定してみてください:

  INSERT INTO 'u_visits' SET ip_adress = '$ip', dates=NOW() ON ...

また、他の誰かが述べたように、 $ip が適切にチェックされていることを絶対に確認してください。そうしないと、SQL インジェクション攻撃を受けることになります。

于 2013-09-01T00:10:28.323 に答える