【问题标题】:prepared statement using bindValue not working使用 bindValue 的准备好的语句不起作用
【发布时间】:2012-11-14 08:15:30
【问题描述】:

我是 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?我在许多在线教程中都看到过这种方式,但我一定是做错了什么。

【问题讨论】:

  • 我认为您将 PDO 语法与 mysqli 混淆了 - PDO 使用 bindValue,而 mysqli 使用 bind_param - php.net/manual/en/mysqli-stmt.bind-param.php,它的工作方式略有不同。
  • 使用合适的 IDE 可以轻松解决。
  • 轻松解决此问题的一种方法是将准备好的语句或至少将参数值写入日志文件以查看它正在获取的内容。我不知道 PHP 中的语法。在 C# 中,您可以使用 System.IO.File.AppendAllText

标签: php prepared-statement bindvalue


【解决方案1】:

mysqli 的 API 与 PDO 非常不同。没有mysql_stmt::bindValue。你想用mysql_stmt::bind_param,但是语法大不相同:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2015-10-11
    • 2018-01-24
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多