2013-04-01 2 views
8

다음 코드를 작동 시키려고하는데 execute() 행에 도달 할 수 없습니다. 내가 할PHP에서 bind_param() 문을 실행하는 방법은 무엇입니까?

$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bind_param('i', 2); 
echo 'Ready to execute<br>' 
if ($stmt->execute()){ 
    echo 'Executing..'; 
    } 
} else { 
    echo 'Error executing!'; 
} 
mysqli_close($mysqli); 

출력은 다음과 같습니다

Connected 
Prepared and binding parameters 

그래서 문제 5 행에 있어야하지만, manual of bind_param()는 내가 거기에 어떤 구문 오류를 찾을 수 없습니다 확인해야한다.

당신이 참조로 사용되는 변수 전달해야 매개 변수를 바인딩 할 때
+3

디버깅에 도움이되는 오류를 반향하지 않는 이유는 무엇입니까? 나는'$ stmt-> error'를 echo하면 mysql이 불평하는 정확한 에러를 얻을 것이라고 생각한다. – Todd

+0

'bind_param()'다음에 다음 줄을 실행할 수 없기 때문에 내 질문이 업데이트되었습니다! @ 토드 그건 유용하고, 염두에 두는 것이 중요합니다. – Lucio

답변

11

:

$var = 1; 

$stmt->bind_param('i', $var); 

은 설명서를 참조하십시오를 : 실제로 정의 할 필요가 없습니다 http://php.net/manual/en/mysqli-stmt.bind-param.php

$var 것을 바인딩하기 . 다음은 완벽하게 유효합니다

$stmt->bind_param('i', $var); 

foreach ($array as $element) 
{ 

    $var = $element['foo']; 

    $stmt->execute(); 

} 
+2

+1, 놀랍습니다.이 사실에 대한 참고 자료가 있습니까? 나는 결코 그것을 배웠다 :) –

+0

네, 내 대답에 대한 링크를 추가했습니다. – MichaelRushton

+0

Tnx !!! 나는 3 시간 동안 같은 문제가 있었다 .... –

-6

귀하의 실제 문제는 5 행에 있지 아니라 라인 1.
에서 당신은 사용할 수없는 드라이버를 사용하려고합니다.
PDO은 원하는대로 정확하게 수행합니다. "인수 풀고"라고


모든 년이 응답이 기록 된 경과 후

$sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?" 
$stm = $this->pdo->prepare($sql); 
$stm->execute(array(2)); 
return $stm->fetch(); 

, 새로운 PHP 기능이 등장.

$stmt->bind_param('i', ...[2]); 

을하지만 여전히 당신은 준비된 문 : 여기

+0

그것이 쓸모가 없다면, 왜 거기에 소프트웨어가 내장되어 있고, 예상대로 작동 하는가? –

+0

사람들이 오래된 mysql ext처럼 맹렬히 사용하기 때문에 ** 모든 단점과 불안정성을 유지 ** –

+0

단점과 불안정, 동의합니다. "사용할 수 없음"은 완전히 다른 것입니다. –

-1

에서 다시 데이터를 받고있는 문제가 그냥 간단한 explaination
입니다 : 그래서, 버전 5.6 이후는 bind_param에 값을 전달할 수 있습니다 바인딩 할 변수를 선언하십시오.

$var="email"; 
$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 

$var="email"; 
$stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bindparam(1,$var); 
관련 문제