Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备好的语句不起作用_Php_Mysql_Prepared Statement - Fatal编程技术网

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()将返回一个布尔值。您应该获取结果并返回这些结果。