2016-08-01 1 views
-3

자리를 대체하지 않습니다 준비 :PDO 내가 PDO 사용하여 데이터베이스를 채우기 위해 다음 코드를 사용했습니다

$stmt = $pdo->prepare(" 
    INSERT INTO :season 
    VALUES 
    (
     :tag,:rank, //and so on 
    );    
"); 

for($l = 0; $l < count($data); $l++) { 
    $stmt->execute([ 
     'season' => $tables[$i], 
     'tag' => $data[$l]["tag"], 
     'rank' => $data[$l]["rank"], 
     // and so on 
    ]); 
} 

하지만 얻을 응답은 다음과 같습니다

구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 사용하여 '? E에서 '1 행에서'VALUES (,,,,,,,,?????????) : \ XAMPP \ htdocs를 \ CoC_API \ legenden \ SQL_Test \ API_SQL.php

사람을합니까 오류가 어디 있는지 아십니까?

모든 항목을 따옴표로 묶어야합니까?

+2

일반적으로 주사를 허용하지 않습니다. 파라미터로서의 테이블 명 –

+0

그리고 TiesonT에 추가. execute() - 호출의 매개 변수 이름 앞에는 선행 콜론이 와야합니다. – user5329483

+0

Tieson의 팁이 수정되었습니다. 그러나 테이블 이름을 동적으로 만드는 다른 방법이 있습니다. 테이블 이름은 숫자 ID이므로 이스케이프 할 필요가 없습니다. –

답변

1

잘못된 값으로 바인드 값이 있습니다. 준비된 쿼리와 마찬가지로 :과 함께 이름을 사용해야합니다. 당신과

for($l = 0; $l < count($data); $l++) { 
    $stmt->execute([ 
     'season' => $tables[$i], 
     'tag' => $data[$l]["tag"], 
     'rank' => $data[$l]["rank"], 
     // and so on 
    ]); 
} 

for($l = 0; $l < count($data); $l++) { 
    $stmt->execute([ 
     ':season' => $tables[$i], 
     ':tag' => $data[$l]["tag"], 
     ':rank' => $data[$l]["rank"], 
     // and so on 
    ]); 
} 

또한이 방법

에 같은 bindValue 방법을 사용할 수 있습니다 코드의이 부분을 교체 execute 방법 http://php.net/manual/en/pdostatement.execute.php

의 문서에 몇 가지 예제를 볼 수 있습니다

for($l = 0; $l < count($data); $l++) { 
    $stmt->bindValue(':season', $tables[$i]); 
    $stmt->bindValue(':tag', $data[$l]["tag"]); 
    $stmt->bindValue(':rank', $data[$l]["rank"]); 
    //and so on 
} 

$stmt->execute();