2017-12-06 12 views
-1

私は、PDO準備文に非常に脆弱だったmysqliデータベースを変換しようとしています。私は、登録データをデータベースに入力するが、他のデータベースには入力しないので、ほとんど入手したと思う。だから私はそれらのクエリにいくつかの問題があるはずだと思うが、私はそれを把握することはできません。以下は私のコードです。その後、代わりにあなたはユーザーテーブルにユーザーを挿入した後、継続的に、情報のさまざまな部分を選択するどのクエリにエラーがあったかを確認するには?

<?php 
session_start(); 
// DATABASE CONNECTION 
$user = '****'; 
$pass = '****'; 

//CREATE CONNECTION 
// $conn = new mysqli($dbserver, $dbusername, $dbpassword, $db); 
$pdo = new PDO('mysql:host=localhost;dbname=****', $user, $pass); 



// ASSIGN VARIABLE FROM FORM 
$username = $_POST['username']; 
$password = $_POST['password']; 
$email = $_POST['email']; 

$password = password_hash($password, PASSWORD_BCRYPT); 

// CHECK IF USER IS UNIQUE 

    $stmt = $pdo->prepare("SELECT username FROM users WHERE username = :name"); 
    $stmt->bindParam(':name', $username); 
    $stmt->execute(); 

    if ($stmt->rowCount() > 0) { 
     echo "That username already exist!"; 
    } else { 
     //INSERT DATA INTO DATABASE 
     $sql = "INSERT INTO users (username, password, email) 
    VALUES (:username, :password, :email)"; 
     $sql1 = "INSERT INTO stats (id, username) 
VALUES ((SELECT id FROM users WHERE username=':username'), (SELECT username FROM users WHERE username=':username'))"; 
     $sql2 = "INSERT INTO progression (id, username) 
VALUES ((SELECT id FROM users WHERE username=':username'), (SELECT username FROM users WHERE username=':username'))"; 
     $sql3 = "INSERT INTO powervalues (id, username) 
VALUES ((SELECT id FROM users WHERE username=':username'), (SELECT username FROM users WHERE username=':username'))"; 


     // EXECUTE AND PREPARE 
     $query = $pdo->prepare($sql); 
     $query1 = $pdo->prepare($sql1); 
     $query2 = $pdo->prepare($sql2); 
     $query3 = $pdo->prepare($sql3); 
     $result = $query->execute(array(':username'=>$username, ':password'=>$password, ':email'=>$email)); 
     $result1 = $query1->execute(array(':username'=>$username)); 
     $result2 = $query2->execute(array(':username'=>$username)); 
     $result3 = $query3->execute(array(':username'=>$username)); 
     //EXECUTE QUERY 
     if ($result && $result1 && $result2 && $result3) { 
      $_SESSION['Accountsucess'] = "Account has been added sucessfully."; 
      header("location: ../../index.php?page=index"); 
     } else { 
      echo "Error database failure"; 
     } 
    } 
+1

PDOを使用しているときにエラーチェックがどのように機能するかは、自分で調べたり読めるようにする必要があります。 – CBroe

+0

あなたの質問に間違いがあるとPDOに伝えさせてください。リンクされた質問を参照してください –

答えて

0

、最後のインサートIDを取得し、その後続の呼び出しで...

$sql = "INSERT INTO users (username, password, email) 
    VALUES (:username, :password, :email)"; 
    $sql1 = "INSERT INTO stats (id, username) 
    VALUES (:id,:username)"; 


    // EXECUTE AND PREPARE 
    $query = $pdo->prepare($sql); 
    $query1 = $pdo->prepare($sql1); 

    $result = $query->execute(array(':username'=>$username, ':password'=>$password, ':email'=>$email)); 
    // Fetch id of new user 
    $id = $pdo->lastInsertId(); 
    $result1 = $query1->execute(array(':id' => $id, ':username'=>$username)); 

リピートを使いますこれは他のステートメントのそれぞれについて同じロジックです。

関連する問題