2016-10-14 2 views
0

PDO를 사용하여 데이터베이스에 연결되었습니다. 내 문제는, 어떤 이유로 테이블에 물건을 삽입 할 수 없다는 것입니다. 내가 mysqli_connect();을 사용하여 연결했을 때 나는 그것을 할 수 있었다. 그러나 그것은 나를 위해 충분히 안전하지 않다. 여기 PHP - PDO가있는 테이블에 삽입 할 수 없습니다

<?php 

$user = "root"; 
$pass = ""; 
$loggedin; 
$conn = new PDO('mysql:host=localhost;dbname=login', $user, $pass); 

if (!$conn) { 
    die("Connection to the database failed"); 
} 

이 코드 데이터베이스에 물건을 삽입하려고 :

<?php 

include '../dbh.php'; 

$first = $_POST['first']; 
$last = $_POST['last']; 
$uid = $_POST['uid']; 
$pwd = $_POST['pwd']; 

if (empty($first)) { 
    header("Location: ../signup.php?error=empty"); 
    exit(); 
} if (empty($last)) { 
    header("Location: ../signup.php?error=empty"); 
    exit(); 
} if (empty($uid)) { 
    header("Location: ../signup.php?error=empty"); 
    exit(); 
} if (empty($pwd)) { 
    header("Location: ../signup.php?error=empty"); 
    exit(); 
} else { 

    $sql = "SELECT uid FROM users WHERE uid='$uid'"; 
    $result = mysqli_query($conn, $sql); 
    $uidcheck = mysqli_num_rows($result); 

    if ($uidcheck > 0) { 
     header("Location: ../signup.php?error=username"); 
     exit(); 
    } else { 
     $sql = "INSERT INTO users (first, last, uid, pwd) 
     VALUES ('$first', '$last', '$uid', '$pwd')"; 

     $result = mysqli_query($conn, $sql); 

     header("Location: ../index.php"); 
    } 
} 
+0

높은 보안이 확실 _not_ A는 여기

는 데이터베이스에 연결 내 코드입니다 mysqli보다'PDO'를 선호하는 이유. – arkascha

+0

당신은'new PDO (...) '를 사용하여 생성 한 객체에서 mysqli _...() 함수를 사용할 수 없다! _ 설명서 및 예제를 읽으십시오! _ HTTP 서버 오류 로그 파일을 간단하게 살펴보면이 문제가 여러분에게 직면 한 것이라고 알려졌을 것입니다. – arkascha

+0

코드가 SQL 주입 공격에 취약합니다. "매개 변수 바인딩"과 함께 "준비된 명령문"의 이점에 대해 읽으 려합니다. – arkascha

답변

0
$sql = "INSERT INTO `users` (`first`, `last`, `uid`, `pwd`) 
    VALUES (:first, :last, :uid, :pwd)"; 
$sth = $conn->prepare($sql); 
$sth->bindValue(':first', $first); 
$sth->bindValue(':last', $last); 
$sth->bindValue(':uid', $uid); 
$sth->bindValue(':pwd', $pwd); 
$sth->execute(); 
관련 문제