2017-03-21 7 views
0

이것은 일부 약간의 기초가 될 수 있지만, 문자열 (영화에서와 같이 전 007)의 정수라면 다음과 같은 성명 같은에 무슨 일이 일어날 것 :PDO 준비 문에서 입력을 필터링 할 때 STR이 interger 형식으로되어 있으면 어떻게됩니까?

$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
  1. 색상은 '007 인 경우 'PDO :: PARAM_STR은 여전히 ​​작동합니까?
  2. int 12는 무엇입니까? 그것이 (색상 & $ 색상)의 길이를 참조합니까?
  3. 필터를 최대화하는 것이 목적입니까? (12 문자열 만 통과합니까?)

감사합니다. 아직 PHP를 처음 사용하는 설명서를 해독하고 있지만 지금까지는 구체적인 내용이 없습니다.

완료 문 here.

/* Execute a prepared statement by binding PHP variables */ 

$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
FROM fruit 
WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 
+2

'007'은'$ calories = 007;'을 사용하면 주어진 8 진수로 취급 될 것이므로 따옴표로 묶어야합니다. –

+0

예, 지금 볼 수 있습니다. 정상적인 문자열로 필터링하고 12를 추가하는 것을 무시할 수있는 시나리오처럼 보입니다 ... 12 개의 지점을 찾을 수 없어 코드를 올바르게 적용하려고했습니다. 통찰력에 감사드립니다. – Magic

답변

0

대부분의 경우에는 아무런 문제가 발생하지 않습니다. 내가 아는 한 SQL은 마치 PHP와 마찬가지로 느슨한 유형의 언어로 숫자를 문자열로 나타낼 수 있으므로 정수를 항상 문자열로 지정할 수 있습니다. 단지 몇 exceptional cases 있습니다 에뮬레이션 모드하거나 문자열 피연산자를 받아 들일 수있는 다른 SQL 절에

  • LIMIT 절. 정확한 유형의 피연산자를 필요로 잘못된 피연산자 유형
  • 특유의 열 유형에 영향을 BIGINT 또는 BOOLEAN 같은 수 사소하지 않은 쿼리 계획
  • 복잡한 쿼리는 BIGINT를 결합하기 위해 점에 유의 (구속하기 PDO :: PARAM_INT 값은 mysqlnd 기반 설치가 필요함).

예를 들어 보겠습니다. 007은 실제로는 문자열이 아니라 정수가 아닙니다. PHP에서는 앞에 오는 0으로 정수를 가져올 수 없습니다. 그러나 실제 정수가있는 경우에도 여전히 문자열로 바인딩 할 수 있습니다.

int 12는 무엇입니까?

이 숫자는 저장 프로 시저에만 사용되는 매우 구체적인 용도로 사용되며 일반 쿼리에는 영향을주지 않습니다.

예를 들어 오해의 소지가 있음을 알 수 있습니다.

+0

안녕 얘들 아, 정보는 너무 계몽적이다. 이제 명확히하기 위해 나는 실제로 12를 떠날 수있었습니다. 간단한 : $ sth-> bindParam (': color', $ color, PDO :: PARAM_STR); 그러한 경우 똑같이 잘 작동할까요? – Magic