不确定我得到的原因:变量数量与预备语句中的参数数量不匹配[重复]

问题描述 投票:0回答:2

我准备好的陈述并不好。我正在尝试做一个简单的测试,但遇到了错误。我正在尝试添加参数,我已经做了一些研究,其中没有一个帮助我理解我哪里出错了。

我已经尝试过在PHP网站和Stackoverflow上查找。这是一个测试项目。

$stmt = $con->prepare('SELECT username, rank, id, steamid, avatar FROM users WHERE id="$uid"');

$stmt->bind_param('i', $uid);
$stmt->execute();
$stmt->bind_result($username, $rank, $id, $steamid, $avatar);
$stmt->fetch();
$stmt->close();

我的预期结果是它只选择使用“WHERE”调用指定的行。我的实际结果是这个错误:mysqli_stmt :: bind_param():变量数与预准备语句中的参数数量不匹配

php mysql prepared-statement
2个回答
5
投票

您绑定了一个变量,但在准备好的语句中没有参数。将PHP变量插值为字符串不是参数。

错误:零参数,只是字符串插值:

$stmt = $con->prepare('SELECT username, rank, id, steamid, avatar FROM users 
  WHERE id="$uid"');

右:一个参数:

$stmt = $con->prepare('SELECT username, rank, id, steamid, avatar FROM users
  WHERE id=?');

0
投票

如果它是PDO那么它是bindParam而不是bind_param

$stmt = $con->prepare('SELECT username, rank, id, steamid, avatar FROM users WHERE id = :uid);

$stmt->bindParam(':uid', $uid, PDO::PARAM_INT);
$uid = 'value here';
$stmt->execute();

$stmt->close();

对于mysqli

$stmt = $con->prepare('SELECT username, rank, id, steamid, avatar FROM users WHERE id = ?);

$stmt->bind_param('i', $uid);
$uid = 'value here';
$stmt->execute();

$stmt->close();
© www.soinside.com 2019 - 2024. All rights reserved.