基本上,我将类文件中的所有语句转换为预处理语句。阅读 php.net 手册后,我仍然看不到我的错误在哪里或是什么。
在这个特定的函数中,我通过用户ID获取用户的配置文件。
有什么帮助吗?
public function getProfile($id){
if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
$result->bind_param("s", $id);
$result->execute();
$result->bind_result($id);
if($result->num_rows !=0){
return $result->fetch();
}else{
return array("error"=>"Profile-Not-Found");
}
$result->close();
}
}
绑定到$id
,但返回 return $result->fetch()
的结果(布尔值)。
而是做
if($result->num_rows !=0){
$result->fetch();
return $id;
}else{
return array("error"=>"Profile-Not-Found");
}
此外,您可能希望列出感兴趣的字段并显式绑定它们,而不是执行SELECT *
不能将bind_result
与SELECT *
一起使用。 您需要在SELECT
中指定字段:
SELECT name, username
并在bind_result
中指定每个变量。
$result->bind_result($name, $username);
(请注意,$result->fetch()
只是填充bind_result
中的变量,它不返回数据,而是返回布尔值。
public function getProfile($id){
if($result = $this->link->prepare("SELECT name,username FROM users WHERE id =?")){
$result->bind_param("s", $id);
$result->execute();
$result->bind_result($name, $username);
if($result->num_rows !=0 && $result->fetch()){
return array('name' => $name, 'username' => $username);
}else{
return array("error"=>"Profile-Not-Found");
}
}
}
或者使用 get_result()
获取整行:
public function getProfile($id){
if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
$result->bind_param("s", $id);
$result->execute();
if($result->num_rows !=0){
$row = $result->get_result();
return $row->fetch_assoc();
}else{
return array("error"=>"Profile-Not-Found");
}
}
}
这是应该这样做的。
<?php
public function getProfile($id){
if($result = $this->link->prepare("SELECT * FROM users WHERE id =?")){
$result->bind_param("s", $id);
$result->execute();
$result->store_result();
if($result->num_rows !=0){
$result1 = $result->get_result();
return $result1->fetch_assoc();
}else{
return array("error"=>"Profile-Not-Found");
}
$result->free_result();
$result->close();
}
}
?>
尝试更改
$result->bind_param("s", $id);
自
$result->bind_param("i", $id);
因为我认为某物的 ID 会是一个整数(也许是您记录的唯一 ID?