2017-03-02 3 views
-2

私は次のような問題に直面しています。私のSQLのエラー

ERROR: Could not able to execute 
INSERT INTO user_db (Name,UserId,Ip_addr) VALUES ('jayesh vyas', 'jay', ::1). 
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 '::1)' at line 1. 

私のコードは次のとおりです。

<?php 
$link = mysqli_connect("localhost", "root", "", "apptitude"); 
$ip_user = $_SERVER['REMOTE_ADDR']; 
// Check connection 
if($link == false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

// Escape user inputs for security 
$uname = mysqli_real_escape_string($link, $_REQUEST['uname']); 
$username = mysqli_real_escape_string($link, $_REQUEST['username']); 

// attempt insert query execution 
$sql = "INSERT INTO user_db (Name,UserId,Ip_addr) VALUES ('$uname', '$username', " . $ip_user . ")"; 
if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 

誰でも私にそれが起こった理由を理解するのを手伝ってもらえますか?

ありがとうございます。

+3

パスワードを変更するのを忘れないでください。 – Strawberry

+4

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared- statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成するため、マニュアルエスケープと文字列補間または連結を使用しないでください。誤ってエスケープされていないデータは重大なリスクです。 – tadman

+1

プレースホルダの値を使用すると、エスケープする問題であるため、すぐにこの問題が修正されます。 – tadman

答えて

1

あなたのSQLステートメントには、IPアドレスの周りに小さな引用符がありません。 $user$usernameの場合と同じように、$_SERVER['REMOTE_ADDR'](MySQLサーバーに接続した後)に再度使用してください:$ip_user = mysqli_real_escape_string($link, $_SERVER['REMOTE_ADDR']);。 おしゃべりによると、準備されたステートメントを使用してください。

Btw。 $_SERVER['REMOTE_ADDR']クライアントのIPアドレスがである必要はありません。 this Postを見てください。

関連する問題