MySQLi OOP 绑定参数错误

MySQLi OOP Bind Parameters Error

我从 MySQLi 开始,我从一个简单的 select 开始并且它有效:

$sql = "SELECT nombres, apellidos FROM users WHERE user = 'juan'";
$result = $con->query($sql);
while($row = $result->fetch_object()){
    print $row->nombres . '<br />';
    print $row->apellidos . '<br />';
}

但是当我尝试使用准备好的语句时没有显示任何结果...我做错了什么?

$user = 'juan';
$sql = "SELECT nombres, apellidos FROM users WHERE user = ?";
$result = $con->prepare($sql);
$result->bind_param('s', $user);
$result->execute();

while($row = $result->fetch_object()){
    print $row->nombres . '<br />';
    print $row->apellidos . '<br />';
}

在准备好的语句中使用 fetch 有点不同。还有另一个用于 mysqli 准备语句的提取 API,你需要使用 ->bind_result() and stmt_fetch() 才能工作。

$result->bind_param('s', $user);
$result->execute();
$result->bind_result($nombres, $apellidos);

while($result->fetch()){
    print $nombres . '<br />';
    print $apellidos . '<br />';
}

执行将 return 一个 mysqli_statement 对象。如果您想像处理查询结果一样处理 mysqli_result 对象,则必须 运行 a $stmt->get_result() 将其转换为 mysqli_result 对象,然后您可以处理作为一个带有 while 循环的 mysqli_result 对象,正如您所做的那样

$user = 'juan';
$sql = "SELECT nombres, apellidos FROM users WHERE user = ?";
$stmt= $con->prepare($sql);
$stmt->bind_param('s', $user);
$stmt->execute();

$result = $stmt->get_result();

while($row = $result->fetch_object()){
    print $row->nombres . '<br />';
    print $row->apellidos . '<br />';
}

Unfortunately this function/method is only available if you have the Native Driver mysqlnd installed.