1

私はPHPが初めてで、準備されたステートメントを機能させようとしています。これは私の大学での最終年度のプロジェクトであり、準備済みステートメントは優れたプラクティスであり、SQL インジェクションにも適していると読んだことを覚えています。ただし、次のコードでは Server 500 エラーが発生します。

<?php
    $email = "blah@blah.co.uk";
    $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 ('blah@blah.co.uk','somerandomhashedpassword')";
    $stmt = $db->prepare($sql);         
    if ($stmt->execute()) {
        echo "You have registered!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
    }
?>

私はbindValue間違って使用していますか?オンラインの多くのチュートリアルでこのように使用されているのを見てきましたが、何か間違ったことをしているに違いありません。

4

1 に答える 1

5

mysqliには、 とは非常に異なる API がありPDOます。ありませんmysql_stmt::bindValue。を使用したいのですmysql_stmt::bind_paramが、構文がかなり異なります。

$stmt->bind_param('ss', $email, $hash);
于 2012-11-26T19:41:46.657 に答える