【问题标题】:How to run the bind_param() statement in PHP?如何在 PHP 中运行 bind_param() 语句?
【发布时间】:2013-03-22 19:28:23
【问题描述】:

我正在尝试使以下代码工作,但我无法到达execute() 行。

$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");
echo 'Prepared and binding parameters<br>';
$stmt->bind_param('i', 2 );
echo 'Ready to execute<br>'
if ($stmt->execute()){
    echo 'Executing..';
    }
} else {
    echo 'Error executing!';
}
mysqli_close($mysqli);

我得到的输出是:

Connected
Prepared and binding parameters

所以问题应该出现在第 5 行,但是检查 manual of bind_param() 我找不到任何语法错误。

【问题讨论】:

  • 为什么不回显收到的错误以帮助调试呢?我认为回显 $stmt-&gt;error 会让你得到 mysql 抱怨的确切错误。
  • 我更新了我的问题,因为现在我什至无法在bind_param() 之后运行以下行! @Todd 这很有用,很重要。

标签: php mysqli prepared-statement


【解决方案1】:

绑定参数时需要传递一个变量作为参考:

$var = 1;

$stmt->bind_param('i', $var);

查看手册:http://php.net/manual/en/mysqli-stmt.bind-param.php

请注意,$var 实际上不必定义为绑定它。以下是完全有效的:

$stmt->bind_param('i', $var);

foreach ($array as $element)
{

    $var = $element['foo'];

    $stmt->execute();

}

【讨论】:

  • +1,太棒了,你对这个事实有什么参考吗?我从没学过:)
  • 是的,已将链接添加到我的答案中。
【解决方案2】:

这里只是一个简单的解释
声明要绑定的变量

    $var="email";
$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';

$var="email";
$stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1);
echo 'Prepared and binding parameters<br>';
$stmt->bindparam(1,$var); 

【讨论】:

    【解决方案3】:

    您的实际问题不在第 5 行,而是在第 1 行。
    您正在尝试使用无法使用的驱动程序。
    而PDO 正是你想要的。

    $sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"
    $stm = $this->pdo->prepare($sql);
    $stm->execute(array(2));
    return $stm->fetch();
    

    自编写此答案以来已经过去了这么多年,出现了一个新的 PHP 功能,称为“参数解包”。因此,从 5.6 版开始,您可以将值传递给 bind_param:

    $stmt->bind_param('i', ...[2]);
    

    但您仍然无法从准备好的语句中取回数据:)

    【讨论】:

    • 如果它无法使用,那为什么还有建立在它之上的软件可以按预期工作?
    • 因为人们直接把它当作旧的 mysql ext 使用,保留了所有的缺点和不安全性
    • 缺点和不安全感,我同意。 “无法使用”完全是另外一回事。
    • 我当然没有。我很高兴你知道我有什么和没有经验。我现在就让你回到你的高位上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多