2016-08-03 2 views
1

데이터베이스에 ampps 서버를 사용하고 있습니다. PHP를 사용하여 서버 데이터베이스에 연결하는 스크립트를 작성했습니다. 이제 데이터베이스 테이블에 데이터를 삽입하려고합니다.mysql 데이터베이스를 사용하여 새 행을 PHP에서 빈 값으로 만듭니다.

스크립트 작성을 시도하고 새로운 행을 null 값으로 삽입하려고합니다.

여러 개의 삽입 쿼리를 시도했지만 성공하지 못했습니다.

<?php 

require("testDB.php"); 


class insertUserHelper 
{ 

    private $name; 
    private $email; 
    private $status; 


    function insertUserHelper($name,$email,$status) 
    { 
      $this -> name = $name; 
      $this -> email = $email; 
      $this -> status = $status; 

    } 

    function insert() 
    { 
     $con = testDatabase::getDB(); 

     echo $name; 
     echo $email; 
     echo $status; 

     $sql = "INSERT INTO user ". "(name,email,status) ". 
     "VALUES ". "('$name','$email','$status')"; 

     if (mysqli_query($con, $sql)) { 
       echo "New record created successfully"; 
     } else { 
       echo "Error: " . $sql . "<br>" . mysqli_error($con); 
     } 

    } 
} 

?> 

아무도 도와 주실 수 있습니까? 당신이 ...

답변

1

당신은() 함수 귀하의 삽입에 지역 변수 $name, $email and $status를 만드는 교체하십시오 시도 감사, $this->name, $this->email and $this->status를 사용해보십시오 대신. 그리고 이와 같은 취약한 쿼리를 작성하는 대신 바인드 변수로 준비된 명령문을 사용하십시오.

+0

예 알아 두십시오. 정말 고맙습니다. 이 코드에 대한 준비된 성명서에 나를 안내해 주시겠습니까? @rypskar –

+1

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php, http://stackoverflow.com/questions/9629328/how-to-use-mysqli-prepared-statements-in -php와 @NanaPartykar의 대답은 준비된 구문을 사용하여 시작할 수있는 좋은 장소입니다. – rypskar

1

$sql = "INSERT INTO user (name,email,status) VALUES ('$name','$email','$status')"; 
0

$sql = "INSERT INTO user ". "(name,email,status) ". 
     "VALUES ". "('$name','$email','$status')"; 

$sql = "INSERT INTO user ". "(name,email,status) ". 
     "VALUES ". "('$this->name','$this->email','$this->status')"; 
0
  1. bind_param을 사용하여 쿼리를 실행하십시오.
  2. 사용 $this->name, $this->email, $this->status 대신 $name, $email, $status의.

업데이트 된 코드 대한 추가 정보를 원하시면

function insert() 
{ 
    $con = testDatabase::getDB(); 

    $stmt = mysqli_prepare($con, "INSERT INTO user (name,email,status) VALUES (?, ?, ?)"); 
    mysqli_stmt_bind_param($stmt, 'sssd', $this->name, $this->email, $this->status); 

    if (mysqli_stmt_execute($stmt)) { 
    echo "New record created successfully"; 
    } else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($con); 
    } 
} 

, 설명

$ stmt-> bind_param ("SSS", $의 FIRSTNAME, $ mysqli_stmt::bind_param

클릭 성, $ 이메일);

인수는 매개 변수가있는 데이터 유형을 나열합니다. s 문자는 매개 변수가 문자열임을 mysql에 알린다.

인수는 네 가지 유형 중 하나가 될 수 있습니다

  1. 전 - 정수
  2. D - 문자열
  3. B - -
  4. 의 이중 BLOB

우리는 하나가 있어야합니다 각 매개 변수에 대해 mysql에 예상되는 데이터 유형을 알려줌으로써 SQL injection의 위험을 최소화합니다.

자세한 내용은 Prepared Statements

+0

mysqli_stmt_bind_param에서 두 번째 매개 변수 'sssd'는 무엇입니까? @ 나나 Partykar –

+1

고맙습니다. :-) @Nana Partykar –

관련 문제