Php 准备好的语句不起作用
我试图使用准备好的语句从表中选择数据,如下所示。这种方法行不通Php 准备好的语句不起作用,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我试图使用准备好的语句从表中选择数据,如下所示。这种方法行不通 $sql = "SELECT * FROM `usrs` WHERE `username` = ? "; $statement = $this->conn->prepare($sql); if (!statement) { throw new Exception($statement->error); } $statement->bind_par
$sql = "SELECT * FROM `usrs` WHERE `username` = ? ";
$statement = $this->conn->prepare($sql);
if (!statement)
{
throw new Exception($statement->error);
}
$statement->bind_param("s",$username);
$returnValue = $statement->execute();
return $returnValue;
$sql
应采用以下格式
$sql = "SELECT * FROM `usrs` WHERE `username` = 'username' ";
但是,上面的代码没有在用户名周围加单引号“”
我需要将用户名放在两个单引号“”之间,如图所示。如果我只使用
$sql = "SELECT * FROM `usrs` WHERE `username` = username "
它不起作用
任何关于如何做到这一点的建议。请仔细阅读:
bool mysqli_stmt::执行(void)
这意味着它返回布尔值——这不是一个可用的对象或数组
你得去拿对账单。
以下是修复方法:
$sql = "SELECT * FROM `usrs` WHERE `username` = ? LIMIT 1";
$statement = $this->conn->prepare($sql);
$statement->bind_param("s",$username);
if ($statement->execute()) {
$result = $statement->get_result();
return $result->fetch_assoc();
}
return null;
另外,谢谢@Phil纠正了我回答中的错误你能更详细地解释一下“不起作用”是什么意思吗?是否有错误?在SQL for prepared语句中,占位符不应包含在引号中。此代码应该可以运行,看起来是正确的,但如果无法运行,则需要找出原因。查看错误日志以了解更多详细信息。很多问题都可以通过检测和解决,因此错误不容易被忽视。老实说,你的做法看起来是正确的。问题中的代码是函数的内容吗?否则我很好奇
return
在那里做什么。如果要显示结果,需要获取并回显它们return
不会打印任何内容。$statement->execute()代码>将返回一个布尔值。您应该获取结果并返回这些结果。