使用bindValue准备好的声明中不工作(prepared statement using bin

2019-10-17 10:08发布

我是新来的PHP,我试图让一个事先准备好的声明的工作。 它在我大学最后一年的项目,我记得读取准备的语句是很好的做法,也是很好的SQL注入。 然而,下面的代码给我一个服务器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不正确? 我已经看到了很多的教程在网上使用这种方式,但我必须做一些错误的。

Answer 1:

mysqli比一个非常不同的API PDO 。 没有mysql_stmt::bindValue 。 你想用mysql_stmt::bind_param ,但语法是完全不同的:

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


文章来源: prepared statement using bindValue not working