【问题标题】:mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement on line 64mysqli_stmt::bind_param():变量数与第 64 行准备好的语句中的参数数不匹配
【发布时间】:2017-04-04 15:49:01
【问题描述】:

我想为我的程序制作一个登录脚本,但它不起作用。错误在bind_param 上。 您能否解释一下为什么它不起作用并教我如何正确操作?

代码:

<?php
$username = $_GET['username'];
$key = $_GET['key'];
$hwid = $_GET['hwid'];


$istKorrekt = istKorrekterSchluessel($username, $key, $hwid);
if($istKorrekt) {
    echo 'true';
} else {
    echo 'false';
}

mysqlTrennen();


function mysqlVerbinden() {
    global $mysqlVerbindung;
$mysqlHost = "localhost";
$mysqlBenutzer = "ts3botauth";
$mysqlPasswort = "nope";
$mysqlDatenbank = "ts3botauth";
$mysqlTabelle = "ts3botauth";
$mysqlVerbindung = new mysqli($mysqlHost, $mysqlBenutzer, $mysqlPasswort, $mysqlDatenbank);

    if($mysqlVerbindung->connect_errno)
        return false;

    return true;
}

function mysqlTrennen() {
    global $mysqlVerbindung;

    $mysqlVerbindung->close();
}

function istKorrekterSchluessel($username, $key , $hwid) {
    global $mysqlVerbindung;
    $mysqlTabelle = "ts3botauth";
    $stmtPruefung = $mysqlVerbindung->prepare("SELECT EXISTS(SELECT * FROM " . $mysqlTabelle . " WHERE `Key`=? AND `Username`=? AND `HWID`=?) AS schluesselKorrekt");

    if(!$stmtPruefung) {
        return false;}  
   $stmtPruefung->bind_param("s",$username);
    $stmtPruefung->bind_param("s", $key);
    $stmtPruefung->bind_param("s", $hwid);

    $stmtPruefung->execute();

    $stmtPruefung->bind_result($schluesselKorrekt);

    $stmtPruefung->fetch();

    return ($schluesselKorrekt == 1);
}

?>

【问题讨论】:

标签: php


【解决方案1】:

bind_param 在 mysqli 中不是这样工作的。也许你在考虑 PDO?在 mysqli 中,您必须使用一个语句一次将它们全部绑定。

$stmtPruefung->bind_param("sss",$username, $key, $hwid);

第 64 行将是 $stmtPruefung-&gt;bind_param("s",$username);,并且您会收到“变量数不匹配”错误,因为它需要所有三个,而您却给了它一个。

【讨论】:

  • “因为它期待所有三个,而你给了它一个。” - 这就是I said 在很多话中的意思。 ;-)
  • @Fred-ii- 好吧,有点。我是说它甚至从未到达$stmtPruefung-&gt;bind_param("s", $hwid);,因为它在$stmtPruefung-&gt;bind_param("s",$username); 上失败了。
  • 是的,我知道。也许这只是我的思维方式;-) 但我们基本上说的是同一件事,只是不同。但这行得通。正如您在回答中提到的那样;可能OP认为PDO的执行方式和MySQLi_一样,其实不然。
猜你喜欢
  • 2023-03-27
  • 2016-01-23
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2016-10-08
  • 2015-05-17
相关资源
最近更新 更多