2013-08-22 5 views
-1
$what = "(999,'string','string2'),(21,'aaaa','bbbbb'),(22,'ccccc','ddddd')"; 
include("../connect/pdoconnect.php"); 
try { 

$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUE :what"); 
$sql->execute(array(":what"=>$what)); 


} 
catch(PDOException $e) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($db->errorInfo()); 
} 

$ get-data-from-csv-function의 값은 얼마인지 알 수 없으므로 몇 개인 지 알 수 없습니다. PDO가이 쿼리를 수행 할 수 없습니다. 직접 쿼리를해야합니다. 어떻게해야합니까?PDO는 어떻게이 쿼리를 수행 할 수 있습니까?

+0

자리 표시자는 * 값 *을 삽입하는 데 사용되므로 코드와 올바르게 구분할 수 있습니다. 코드를 삽입하기 위해 * code * PDO를 사용한다면 코드로 처리하지 않을 것입니다. –

+0

배열에서 $ what을 어딘가에서 생성하는 경우 PDO 준비 문이 해당 배열 루프의 대상이어야합니다. – Cups

+0

버그가 수정되었습니다. 고마워요. – crazyoxygen

답변

3

단일 자리 표시 자로는이 작업을 수행 할 수 없습니다. 자리 표시자는 일반 표현식이 허용되는 곳에서만 허용되며 값 목록은 단일 표현식이 아닙니다.

Gautam3164의 답변 에서처럼 문자열 보간/연결 중 하나를 사용해야하거나 한 번에 한 행을 삽입하는 루프를 사용해야합니다.

$whats = array(array('userid' => 999, 'picturename' => 'string', 'picturepath' => 'string2'), 
       array('userid' => 21, 'picturename' => 'aaaa', 'picturepath' => 'bbbbb'), 
       array('userid' => 22, 'picturename' => 'ccccc', 'picturepath' => 'ddddd') 
      ); 
$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUES (:userid, :picturename, :picturepath)"); 
foreach ($whats as $what) { 
    $sql->execute($what); 
} 

문자열 연결을 사용하면 매개 변수화 된 문을 보호 할 수 없습니다. 모든 문자열이 제대로 살균되거나 이스케이프되어야합니다.

+0

고맙습니다. 내가 시도 할 것입니다 :) – crazyoxygen

+0

@Batmar +1 당신을 위해 ... 좋은 ans – Gautam3164

+0

흠 나는 시도하고 그것은 치명적인 오류를 보여줍니다 : 구성원이 아닌 개체에 준비() 전화를 호출합니다. – crazyoxygen

관련 문제