我对这种编码很新,所以我需要帮助。 这是我从数据库读取值并返回数组的代码:
public function avtorizacije($user)
{
$sql = "SELECT * FROM uporabniki_avtorizacije WHERE userId=?";
if( !$this->stmt = $this->mysqli->prepare($sql) )
throw new Exception("MySQL Prepare statement failed: ".$this->mysqli->error);
$this->stmt->bind_param("i", $user);
$this->stmt->execute();
$this->stmt->store_result();
if( $this->stmt->num_rows == 0)
return "";
$this->stmt->bind_result($value);
$this->stmt->fetch();
return $value;
}
这是我得到的错误:
警告:mysqli_stmt :: bind_result():绑定变量的数量与...中预准备语句中的字段数不匹配。
我需要从数据库中的选定行返回所有值。
请帮忙。
答案 0 :(得分:0)
在这里使用
`SELECT *`
从表中提取所有字段,
在这里绑定一个变量。
$this->stmt->bind_result($value);
这是您的错误
警告:mysqli_stmt :: bind_result():绑定变量的数量与...中预准备语句中的字段数不匹配。
现在我打赌你的桌子上有一个以上的字段,不是吗?因此,您需要按照查询中的顺序为每个字段绑定变量。
这说我不是Mysqli,就像4年一样,如果我弄错了,请原谅我...大声笑(我现在使用PDO,好多了)
您可以在文档页面的第一个示例中清楚地看到这一点。
答案 1 :(得分:0)
您可以bind_result
到array
返回array
;
只需将$col
索引名称更改为数据库表中的字段名称,按照从SQL字符串中检索它们的顺序。
$col['username'] = '';
$col['col2'] = ''; // change index here and below with reference to the table fields you're fetching
$col['col3'] = '';
$col['col4'] = '';
$this->stmt->bind_result($col['username'], $col['col1'], $col['col1'], $col['col1'] );
$this->stmt->fetch();
return $col;
或者只使用下面的代码。它使用get_result()
和fetch_assoc()
立即以数组格式返回记录。
<强>替代:强>
public function avtorizacije($user)
{
$sql = "SELECT * FROM uporabniki_avtorizacije WHERE userId=?";
if( !$this->stmt = $this->mysqli->prepare($sql) )
throw new Exception("MySQL Prepare statement failed: ".$this->mysqli->error);
$this->stmt->bind_param("i", $user);
$this->stmt->execute();
$result = $this->stmt->get_result();
if( $result->num_rows == 0)
return "";
return $result->fetch_assoc();
}