2011-12-18 2 views
0

mysqli 준비 문에 대한 래퍼를 테스트 해본 결과 예상하지 못한 결과가 나타났습니다. 내 테이블 손님에서 first_name은 varchar [32] (기본적으로 문자열)이고 id는 정수입니다. 내 함수는 아래 예제에서 $ first_name 및 $ id와 같은 매개 변수에 getType을 사용하여 bind_param 메소드의 $ types 매개 변수를 작성합니다. 나는 $ id가 양식 입력에서 가져온 것과 같은 문제를 해결할 준비가되어 있었고 실제로는 문자열이거나 somewone이 숫자 인 문자열을 입력하면 문제가되지 않는다는 것을 깨달았을 때 어떤 일이 일어나는가 0_0

$SQL = 'update guests set first_name = ? where id = ?'; 
$mysqli->execute($SQL, $first_name, $id); 

모두 다음 성공 사례가 성공한 삽입 결과 :

$ id = "1"; $ first_name = "Frank"; $ types param은 (는) 'ss'입니다.

$ id = 1; $ first_name = 3; $ 유형 param은 'ii'였습니다.

그럼 어떻게해야할까요?

편집 :

call_user_func_array(array($statement, 'bind_param'), $bind_params); 

당신은 내가 bind_param 전화 해요 방법은 요소라고 생각? 어쨌든 나는 왜 그런지 알고 싶다.

답변

1

$types 파라미터 생성 SQL 영향을, 상기 제 1의 예는 다음의 SQL 준다 :

update guests set first_name = 'Frank' where id = '1'; 

및 제 :

update guests set first_name = 3 where id = 1; 

를 MySQL을이 처리로 이들은 모두 유효한 SQL 명령문이다 유형 변환. 따라서 $types 매개 변수는 중요하지만 생성하는 SQL 문의 유효성까지입니다.