2017-11-21 17 views
-4

多くの人が時々同じエラーを抱えていることは知っていますが、前回の回答と私のコードを見て、私はcolを試しました。 $varだけでなく、ちょうど$varが、同じmysqliの挿入エラーの構文が正しくない

if(!empty($_POST['email'])){ 
$date = date('dmY'); #Todays Date 
$ip = str_replace('.','',$_SERVER['REMOTE_ADDR']); #Visitor IP 
$verify = md5($date.$ip); #MD5 ENCRYPT THE 2 VALUES 
$fname = $_POST['fname']; 
$lname = $_POST['lname']; 
$email = $_POST['email']; 
$password = md5($_POST['password']); 
$link = mysqli_connect($dbh,$dbu, $dbp, $dbn); 

$query = mysqli_query($link, "INSERT INTO `users` (`email`,`fname`,`lname`,`verify`,`password`,`joined`) 
VALUES($email,$fname,$lname,$verify,$password,$date)"); 

if($query){ 
    echo "inserted"; 
} 
else { 
    echo mysqli_error($link); 
} 

でしかしその唯一の上記の列は、私は私がしてきた当初

をデフォルト値を使用することができ、残りのデータを追加するテーブルの他の列があります。長い間このコードを見ていないw私はちょうど私の問題を見つけることができません、私は何かが愚かであることを知っています

+0

uidはそのこと私は、検証文字列を作成していますパスワードのAUTO_INCREMENT –

+0

あるので...実際のカラム名の言うことを無視.. は、私たちは、実際の問題に焦点を当てることができますあなたのクエリが株価を欠落していることが_would_ –

+0

ください。しかし、あなたはSQLインジェクションをする傾向があります。パラメータ化されたクエリでプリペアドステートメントを使用してください。 – FirstOne

答えて

0

SQLのクエリに変数を追加する最も紛らわしい方法は、ステートメントを介して追加することです。

少なくとも1つの変数を使用する場合は、実行するすべてのクエリに対して、プレースホルダーで置き換えてからクエリを準備し、変数を別々に渡して実行する必要があります。

まず、変数の代わりにプレースホルダを追加して、クエリを変更する必要があります。あなたのクエリはなります:

$sql = "INSERT INTO users (fname, lname) VALUES (?, ?)"; 

その後、あなたは、それを準備変数をバインドし、実行する必要があります:

    $stmt = mysqli_prepare($conn, $sql); 
    mysqli_stmt_bind_param($stmt, "ss", $fname, $lname); 
    mysqli_stmt_execute($stmt); 
    

    あなたが見ることができるように、それだけで3つの簡単なコマンドです

  • プレースホルダを使用してクエリを送信する場所
  • bind_param型を持つ文字列を送信する場所( "s"は文字列のため、実際にはどの型にも使用できます)a実際の変数よりも
  • と実行()

この方法で、あなたは常に単一のSQL構文エラーがクエリに追加されたデータによって引き起こされる可能性がないことを確認することができます!ボーナスとして、このコードはSQLインジェクションに対する防弾です!

変数の周りに引用符を追加するだけでは不十分であり、文法エラーからSQLインジェクションへの無数の問題につながることを理解することが非常に重要です。一方、準備されたステートメントの性質上、データ変数を通して問題を導入することが不可能な、弾丸を使用したソリューションです。

+0

まさに私は実際に誰かが私は準備された文を試みたが、それはそれゆえ、私は(bindparamが機能していないとの問題があった)それは今、この警告を与える –

+0

答え多くの感謝を受け入れます 基本的なクエリ に戻ったワーキング取得couldntの 投稿望んでいました。 :mysqli_stmt_bind_param()は、パラメータ1がmysqli_stmtであるとします。ブール値は –

+0

です。したがって、宣言した場合、最初のパラメータが実際には '$ statement'変数であることを確認してください。 – ultrasamad

関連する問題