복붙노트

[SQL] MySQL의 문 안에 PHP 변수를 포함하는 방법

SQL

MySQL의 문 안에 PHP 변수를 포함하는 방법

나는 내용 테이블에 값을 삽입하기 위해 노력하고있어. 내가 VALUES 안에 PHP 변수가없는 경우 잘 작동합니다. 내가 VALUES 내부 변수 $ 유형을 넣었을 때 다음이 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

$type = 'testing';
mysql_query("INSERT INTO contents (type, reporter, description) 
     VALUES($type, 'john', 'whatever')");

해결법

  1. ==============================

    1.어떤 MySQL의 문의 PHP 변수의 내부를 추가하는 규칙은 평범하고 단순하다 :

    어떤 MySQL의 문의 PHP 변수의 내부를 추가하는 규칙은 평범하고 단순하다 :

    귀하의 예제는 데이터 리터럴을 포함 그래서, 모든 변수는 자리 (또한 매개 변수)를 추가해야합니다. 이렇게하려면 :

    그리고 여기에 모든 인기있는 PHP 데이터베이스 드라이버 방법으로 할 수 있습니다 :

    이러한 드라이버가 존재하지 않습니다.

    $type = 'testing';
    $reporter = "John O'Hara";
    $query = "INSERT INTO contents (type, reporter, description) 
                 VALUES(?, ?, 'whatever')";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("ss", $type, $reporter);
    $stmt->execute();
    

    코드는 약간 복잡하지만, 모든 사업자의 상세한 설명은 나의 방법 Mysqli를 사용하여 INSERT 쿼리를 실행하는 기사뿐만 아니라 극적 과정을 용이하게하는 솔루션에서 찾을 수 있습니다.

    $type = 'testing';
    $reporter = "John O'Hara";
    $query = "INSERT INTO contents (type, reporter, description) 
                 VALUES(?, ?, 'whatever')";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$type, $reporter]);
    

    PDO에서, 우리는 바인딩을 가질 수 있고 매우 편리하다, 결합 부분을 실행합니다. PDO는 또한 일부는 매우 편리하게 찾을 수라는 이름의 자리 표시자를 지원합니다.

    그러나 때때로 우리는 키워드 나 식별자 (데이터베이스, 테이블 또는 필드 이름)으로, 쿼리의 다른 부분을 나타내는 변수를 추가했습니다. 이 경우, 변수는 명시 적으로 스크립트로 작성된 값 목록에 대해 검사해야합니다. 이것은 사용자의 선택에 따라 ORDER BY 절에서 필드 이름을 추가, 내 다른 문서에 설명되어 있습니다 :

    다음은 그 예이다 :

    $orderby = $_GET['orderby'] ?: "name"; // set the default value
    $allowed = ["name","price","qty"]; // the white list of allowed field names
    $key = array_search($orderby, $allowed, true); // see if we have such a name
    if ($key === false) { 
        throw new InvalidArgumentException("Invalid field name"); 
    }
    
    $direction = $_GET['direction'] ?: "ASC";
    $allowed = ["ASC","DESC"];
    $key = array_search($direction, $allowed, true);
    if ($key === false) { 
        throw new InvalidArgumentException("Invalid ORDER BY direction"); 
    }
    

    그들 중 하나입니다 허용 변종 중 하나 같거나 던져 오류가있을 것 같은 그런 코드 후, $ 방향과 $ ORDERBY 변수 모두 안전하게 SQL 쿼리에 넣어 수 있습니다.

    마지막 것은 그들은 또한 특정 데이터베이스 구문에 따라 포맷해야합니다, 식별자에 대해 언급합니다. MySQL을 위해 그것은 식별자의 주위에 문자를 역 따옴표해야합니다. 예에 의해 우리의 주문에 대한 최종 쿼리 문자열이 될 것이다 그래서

    $query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
    
  2. ==============================

    2.그것이 문자열만큼 - 따옴표 안에 넣어해야

    그것이 문자열만큼 - 따옴표 안에 넣어해야

    $type = 'testing';
    mysql_query("INSERT INTO contents (type, reporter, description) VALUES('$type', 'john', 'whatever')");
    

    다니가 adviced으로 그리고, 예 : 당신은) (당신이 mysql_real_escape_string를 함께 쿼리에 넣어 모든 문자열을 살균한다

  3. ==============================

    3.BE와 삽입 문을 SQL 주입을 방지하려면

    BE와 삽입 문을 SQL 주입을 방지하려면

    $type = 'testing';
    $name = 'john';
    $description = 'whatever';
    
    $stmt = $con->prepare("INSERT INTO contents (type, reporter, description) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $type , $name, $description);
    $stmt->execute();
    
  4. ==============================

    4.$ 유형 내의 텍스트 따라서 MySQL은이 도착, 삽입 문자열로 직접 치환된다 :

    $ 유형 내의 텍스트 따라서 MySQL은이 도착, 삽입 문자열로 직접 치환된다 :

    ... VALUES(testing, 'john', 'whatever')
    

    테스트 주위에 따옴표가 없음을 통지, 당신은 너무 같은 이들을 둘 필요가 :

    $type = 'testing';
    mysql_query("INSERT INTO contents (type, reporter, description) VALUES('$type', 'john', 'whatever')");
    

    또한 매개 변수 전달이 종류의 시도를 해킹하는 경향이있다 당신이 사용되는 데이터를 소독하지 않는 경우, SQL 주입에 읽을 권장합니다 :

  5. ==============================

    5.즉, 쉽게 대답 :

    즉, 쉽게 대답 :

    $query="SELECT * FROM CountryInfo WHERE Name = '".$name."'";
    

    당신은 당신이 원하는대로 $ 이름을 정의합니다. 그리고 또 다른 방법, 복잡한 방법은, 그 같다 :

    $query = " SELECT '" . $GLOBALS['Name'] . "' .* " .
             " FROM CountryInfo " .
             " INNER JOIN District " .
             " ON District.CountryInfoId = CountryInfo.CountryInfoId " .
             " INNER JOIN City " .
             " ON City.DistrictId = District.DistrictId " .
             " INNER JOIN '" . $GLOBALS['Name'] . "' " .
             " ON '" . $GLOBALS['Name'] . "'.CityId = City.CityId " .
             " WHERE CountryInfo.Name = '" . $GLOBALS['CountryName'] .
             "'";
    
  6. ==============================

    6.최선의 선택은 준비된 문이다. 시세 및 탈출로 장난하는 것은 어려워로 시작하는 일,하고 유지하기 어렵다. 조만간 당신이 종료됩니다 실수로 그런 일까지 뭔가를 인용 또는 두 번 같은 문자열을 이스케이프 결국, 또는 혼란을 잊고. 당신이 버그의 그 유형을 찾을 수 년 전에 될 수 있습니다.

    최선의 선택은 준비된 문이다. 시세 및 탈출로 장난하는 것은 어려워로 시작하는 일,하고 유지하기 어렵다. 조만간 당신이 종료됩니다 실수로 그런 일까지 뭔가를 인용 또는 두 번 같은 문자열을 이스케이프 결국, 또는 혼란을 잊고. 당신이 버그의 그 유형을 찾을 수 년 전에 될 수 있습니다.

    http://php.net/manual/en/pdo.prepared-statements.php

  7. ==============================

    7.이 시도:

    이 시도:

    $type = 'testing';
    mysql_query("INSERT INTO contents (type, reporter, description) VALUES('$type', 'john', 'whatever')");
    

    당신은 '$ 유형을'둘 필요가 아니라 $ 유형

  8. ==============================

    8.변수는 사용자 입력 또는 기타 데이터를 포함하는 경우는 없습니다 신뢰, 데이터를 탈출 확신 할 수 있습니다. 이 같이 :

    변수는 사용자 입력 또는 기타 데이터를 포함하는 경우는 없습니다 신뢰, 데이터를 탈출 확신 할 수 있습니다. 이 같이 :

    $query = sprintf("INSERT INTO contents (type) VALUES ('%s')", mysql_real_escape_string($type));
    $result = mysql_query($query);
    
  9. ==============================

    9.여기

    여기

    $type='testing' //it's string
    
    mysql_query("INSERT INTO contents (type, reporter, description) VALUES('$type', 'john', 'whatever')");//at that time u can use it(for string)
    
    
    $type=12 //it's integer
    mysql_query("INSERT INTO contents (type, reporter, description) VALUES($type, 'john', 'whatever')");//at that time u can use $type
    
  10. ==============================

    10.나는이 질문에 대한 몇 가지 답변이 있었다 알고 있지만 나는 다음과 같은 구문을 따르는 경우에, 나는 다시 오류에 문제가 없었 것을 추가 할 생각했다. 당신이 사용하는 테이블이 추가되는 열이 어떤 질문이 없습니다.

    나는이 질문에 대한 몇 가지 답변이 있었다 알고 있지만 나는 다음과 같은 구문을 따르는 경우에, 나는 다시 오류에 문제가 없었 것을 추가 할 생각했다. 당신이 사용하는 테이블이 추가되는 열이 어떤 질문이 없습니다.

    $query    = "INSERT INTO contents (type, reporter, description) 
             VALUES('".$type."', '".$reporter."', '"$whatever."')";
    
  11. ==============================

    11.내부 : 당신은 작은 따옴표 나 큰 따옴표, 다음 괄호 다음 변수 이름 ($ abc 방송 예)에서 변수를 작성해야합니다.

    내부 : 당신은 작은 따옴표 나 큰 따옴표, 다음 괄호 다음 변수 이름 ($ abc 방송 예)에서 변수를 작성해야합니다.

    예:

    SELECT * FROM log WHERE id = '{$id}';
    
  12. from https://stackoverflow.com/questions/7537377/how-to-include-a-php-variable-inside-a-mysql-statement by cc-by-sa and MIT license