2014-11-09 7 views
-3

나는 PHP와 mysqli를 사용하여 준비된 문장을 이해하고있다. 나는 약간의 튜토리얼, 매뉴얼 및이 것을 읽으려고했다 : Bind_Param in PHP,하지만. 아직 어떤 만족스러운 발견 자도 발견하지 못했습니다.정확히 bind_param()이 mysqli에서하는 것은?

When you prepare an SQL statement, you can insert a placeholder (?) where a column value would go, then use bind_param() to safely substitute that placeholder for the real column's value. This prevents any possibility of an SQL injection :

누군가가 같은 대답에 썼다. '?'

나는 우리가 작성하는 것이 이해
$stmt = $con->prepare("INSERT INTO user_accounts VALUES (?,?,?,?)"); 

$stmt->bind_param('xyz', $sample1, $sample2, $sample3, $sample4); // bind to the parameter 

:

나는이 같은 튜토리얼에서 몇 가지 코드를 발견 실제 값을 나중에 제공 할 수 있도록 변수 대신. mysql은 변수가 매개 변수로 주어진 것보다 쿼리 실행을위한 계획을 준비한다.

하지만이 코드 줄에 무엇이 나와 있는지 알려주시겠습니까?

bind_param('xyz', $sample1, $sample2, $sample3, $sample4); 
정확히 여기에 'XYZ'을 매개 변수를 무엇을 네 개의 변수가 매개 변수로 뭔가 'XYZ'로 주어진다

...? 나중에 쓸 필요가 있습니까? 다른 곳에서는 사용되지 않았습니다.

누구든지 설명 할 수 있습니까? plz 도움.

편집 :

난 단지 이것에 대한 대답합니다. 당신이 설명 할 수 있다면, PLZ 도움 :

enter image description here

+1

@krupalshah 글쎄 아직 투표하지 않은 사람이 있습니다. 그러나 매뉴얼의 상담이 도움이됩니다. 각 인수가 의미하고 의미하는 바를 보여줍니다. 당신은 여전히 ​​누군가 대답으로 여기에 그것을 쓰길 원합니까? 여기, 설명서에 있습니다. http://i.imgur.com/WxGTcL8.png – Ghost

+1

매뉴얼에 따르면'types' - 해당 바인드 변수의 유형을 지정하는 하나 이상의 문자가 포함 된 문자열입니다. 여기에 뭐가 불분명하니? –

+0

@u_mulder 처음에는 'sssd'가 유형이라는 것을 이해하기 어렵습니다. 그렇지 않니? –

답변

2

을 것을

은 그래서 당신의 경우에, sssd 의미합니다. 그럼에도 불구하고 자세한 배경 정보는 this을 참조하십시오.

바인딩 매개 변수 용 mysqli API는 틀림없이 그리 우아하지 않습니다.그것은 다음과 같습니다

bool mysqli_stmt::bind_param (string $types , mixed &$var1 [, mixed &$... ]) 

이이 기능, $types에 첫 번째 인수는, mysqli에게이로 취급해야하는지 유형 당신의 매개 변수가 무엇인지 정보를/제공을 의미합니다. 다음은 개별 매개 변수입니다.

$types 인수는 개별 문자의 문자열이며 각 문자는 유형을 나타냅니다. i, d, sb, 정수, 더블, 문자열위해 서 : 네 가지 종류가 있습니다. 따라서 두 개의 정수와 하나의 문자열을 묶으려는 경우 $type 매개 변수는 iis이어야합니다. 그런 다음 실제 값을 따르십시오 :

$int1 = 42; 
$int2 = 11; 
$str = 'foo'; 

$stmt->bind_param('iis', $int1, $int2, $str); 
+0

감사합니다. 왜냐하면 나는 'sssd'에서 특별한 것을 발견하지 못했기 때문에 처음에는 이해하지 못했습니다. 당신의 도움을 주셔서 감사합니다. –

2

XYZ 컬럼의 데이터 유형을 지정합니다. 예를 들어 우리는 네 개의 열이있는 경우 모든 문자열 유형, 우리는 쓰기 : 한 열이 integer 유형 인

$stmt->bind_param('ssss', $sample1, $sample2, $sample3, $sample4); 

경우, 우리는 i 대신 s 사용합니다.

$stmt->bind_param('ssis', $sample1, $sample2, $sample3, $sample4); 

제 1 및 제 2 열은 문자열 (s)임을 지정하고 세번째 integer (i)이며 항은 문자열 (s)이다 세번째 컬럼 integer 경우 예를 들어, 우리는 물품. bind_parameter 함수의 첫 번째 매개 변수에 대한

, 우리는 ddouble 유형과 bblob입니다, integer를 들어, 문자열 유형 i 스탠드를 s을 사용합니다. 네 번째 열은 double이고 나머지는 당신이 바인딩 매개 변수의 개념을 이해 생각, 그래서 내가 그에 가지 않을 string

+0

나는 * column *이 다소 비합법적이라고 비판했다. 그것은 단순히 MySQL이 그 값을보기를 원하는 유형입니다. 예를 들어'SELECT? +?'는 준비하고 바인딩 할 수있는 완벽하게 유효한 쿼리이지만 열과는 아무런 관련이 없습니다. – deceze

+1

@deceze 당신이 맞습니다 만이 질문에 대해서는'column'이라는 단어를 사용하는 것이 여전히 유효합니다 (초보자를위한 답입니다) – Ormoz

+0

b는 blob 또는 binary를위한 것입니까? –