2012-11-26 2 views
1

저는 PHP를 처음 사용하고 있으며 준비된 명령문을 얻으려고합니다. 대학에서의 나의 마지막 해의 프로젝트를 위해 그리고 나는 준비된 진술이 좋은 연습이고 또한 SQL 주입에 좋은 것을 읽었던 것을 기억한다. 그러나 다음 코드에서는 Server 500 오류가 발생합니다.prepared statement with bindValue not working

<?php 
    $email = "[email protected]"; 
    $hash = "somerandomhashedpassword"; 
    $db = new mysqli("localhost", "root", "1234", "UEAnetwork");  
    $sql = "INSERT INTO Students (Email, Password) VALUES (?,?)"; 
    $stmt = $db->prepare($sql); 
    $stmt->bindValue(1, $email); 
    $stmt->bindValue(2, $hash);   
    if ($stmt->execute()) { 
     echo "You have registered!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; 
    } 
?> 

다음을 실행하면 행이 삽입되므로 데이터베이스에 올바르게 연결되어 있습니다.

<?php 
    $db = new mysqli("localhost", "root", "1234", "UEAnetwork");  
    $sql = "INSERT INTO Students (Email, Password) VALUES ('[email protected]','somerandomhashedpassword')"; 
    $stmt = $db->prepare($sql);   
    if ($stmt->execute()) { 
     echo "You have registered!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; 
    } 
?> 

bindValue을 잘못 사용하고 있습니까? 나는 온라인으로 많은 튜토리얼에서이 방법을 사용하는 것을 보았지만 뭔가 잘못하고 있어야합니다.

+2

난 당신이 mysqli와 PDO 구문을 혼동하고 생각 - mysqli가 bind_param을 사용하는 반면 PDO는 bindValue가 사용 - http://php.net/manual/en /mysqli-stmt.bind-param.php이며 약간 다른 방식으로 작동합니다. – andrewsi

+0

적절한 IDE를 사용하면 쉽게 해결할 수 있습니다. –

답변

5

mysqliPDO과 매우 다른 API를 가지고 있습니다. mysql_stmt::bindValue은 없습니다. 당신은 mysql_stmt::bind_param를 사용하지만 구문은 매우 다르다 :

$stmt->bind_param('ss', $email, $hash);