2012-04-21 2 views
0

mysql 데이터베이스에 준비된 sql insert 문 (placeholders?,?를 사용)을 전달 중입니다. 그런 다음 -> execute ($ array)를 사용하여 값의 단일 배열을 전달합니다. 배열의 전체 필드에 입력 된 데이터가있을 때 위의 코드는 효과적입니다. 단 하나의 요소가 완성되지 않았다면 말입니다.PHP Prepared Statement Fails

더 오래된 mysql_query를 사용하면 값이 누락되면 데이터베이스에 값을 삽입하지 않을 것입니다.

준비된 진술에서 어떻게 대응할 수 있습니까?

감사합니다.

+1

단순히 단순히/무시 오류를 침묵 버그를 처리하는 적절한 오류가 없었 전에 일을합니다. – ThiefMaster

+2

PDO/mysqli는 제공하지 않으면 마술처럼 데이터를 생성 할 수 없습니다. 관련 DB 필드가 'null이 아니거나'입니까? –

답변

0

당신이 처리하는 방식은 쿼리에 대한 모든 관련 값을 올바르게 입력했는지 확인하는 것입니다. mysql_query()는 하루가 끝나면 MySQL을 지원하기 만하면되기 때문에 원하는만큼 느려질 수 있습니다. 그러나 PDO는 관계형 데이터 저장을위한 일반적인 인터페이스이며 모든 데이터를 입력했는지 확인하는 일을하지 않습니다 귀하의 데이터.

0

mysql_query가 매개 변수를 사용하지 않기 때문에 비교가 표시되지 않습니까?

PDO 개체를 사용하려면 요소를 매개 변수에 바인딩해야합니다.

$stmt->execute(array($value1, $value2, $etc)); 

를 쿼리는 다음과 같습니다 경우 :

$stmt->bindParam(":namedParam", 1, PDO::PARAM_INT); 

이 그렇게 내부적으로 PDO는 여전히 자체에 대한 몇 가지 추가 작업과 위의를해야한다, 짧은 손으로 :

이 긴 방법입니다
INSET INTO mytbl VALUES (?, ?, ?, ?, ?) 

하고 $ 데이터 배열은 다음과 같습니다

$data = array($val1, $val2, $val3); 
,

두 개의 NULL 값을 어디에 삽입해야한다고 생각합니까?
첫 번째 & 세 번째 ?? PDO는이를 어떻게 알아야합니까? 당신이 그 질문에 대한 답을 알고있는 경우

또한, 당신은 여전히 ​​PHP에서 그것을 처리 할 수 ​​

function queryMyTable($val1, $val2, $val3, $val4 = null, $val5 = null) { 
    ... 
    $stmt->execute(array($val1, $val2, $val3, $val4, $val5)); 
} 
관련 문제