2017-05-28 1 views
0

私のブラウザでは26行目にエラーが表示されています。IF NOT EXISTSを使用しようとしているときに、「Unrecognized SQL statement」とは何を意味していますか?

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$database = "tut"; 

$conn = mysqli_connect($servername, $username, $password, $database); 

if (!$conn) { 
    die("Database connection failed: ".mysqli_connect_error()); 
} 
if (isset($_POST['register'])) 
{ 
    $user = $_POST['username']; 
    $pass = $_POST['password']; 
    $pass2=$_POST['password1']; 

    if(empty($username)||empty ($password)||empty($password1)){ 
     echo "Oops! Can't leave any field blank"; 
    } 
    elseif($pass!=$pass2){ 
     echo "Passwords don't match"; 
    } 
    else{ 
     $phash = sha1(sha1($pass."salt")."salt"); 
     $sql=IF NOT EXISTS (SELECT * FROM users WHERE username = '$user') 
      INSERT INTO users (id, username, password) VALUES ('', '$user', '$phash') 
     ELSE 
      RAISERROR 'Username exists, please select a different one'; 
     $result = mysqli_query($conn, $sql); 
    } 
} 
?> 

これは、IF NOT EXISTS文を書き込む正しい方法ではありませんか?また、私はこれをXAMPPで直接実行しようとすると、認識できないSQL文のエラーが発生します。

+0

IFの中にTHENがありません – Haris

+0

@ maytham-answerからTHEN @ハリス – lmgguy

+1

+1が必要ではありません。 P.S.コードがSQLインジェクションに対して脆弱であるため、パラメータ化されたクエリを使用する方法を学んでください。 –

答えて

2

これはそれを行う方法ですが、私はテストにそれを持っているし、それが動作します:

$sql = " 
    INSERT INTO users (username, password) 
    SELECT * FROM (SELECT '$user', '$phash') AS tmp 
    WHERE NOT EXISTS (
     SELECT username FROM users WHERE username = '$user' 
    ) LIMIT 1; 
"; 

このソリューションは、このanswerからインスピレーションを得ています。

問題はPHPとMySQLのステートメントを組み合わせることができないということです。すべてのMySQLステートメントを引用符で囲む必要があります"

RAISERRORとなるものは、MySQLの機能ではなく、Microsoftに属します。

$sqlに有効なユーザー名が含まれているかどうかを確認してメッ​​セージを返すphp if文を簡単に作成できます。その部分はあなたの幻想に委ねられています。

XAMPPはこのエラーに関係なく、Windows用のApacheおよびMySQLインストールを提供するソフトウェアです。

注:P.S. コードがSQLインジェクションに対して脆弱であるため、パラメータ化されたクエリを使用する方法を学んでください。 @BillKarwinに感謝します。

関連する問題