带有mySQLi fetch的PHP OOP
我对PHP OOP还比较陌生,我知道这里有很多问题,但没有一个能为我指明正确的方向。我已经创建了类user,我正在另一个文件中调用它 我试图让方法“reset”调用“connect”,连接到mysql数据库,然后查询它,并为行内容设置各种属性 我没有收到任何错误,但出于某种原因,它没有从数据库向属性提供任何数据 我试着将mySQL连接放在reset方法中,只是想看看变量是否不能在方法之间传递。但仍然没有快乐 谁能给我指出正确的方向吗带有mySQLi fetch的PHP OOP,php,oop,mysqli,Php,Oop,Mysqli,我对PHP OOP还比较陌生,我知道这里有很多问题,但没有一个能为我指明正确的方向。我已经创建了类user,我正在另一个文件中调用它 我试图让方法“reset”调用“connect”,连接到mysql数据库,然后查询它,并为行内容设置各种属性 我没有收到任何错误,但出于某种原因,它没有从数据库向属性提供任何数据 我试着将mySQL连接放在reset方法中,只是想看看变量是否不能在方法之间传递。但仍然没有快乐 谁能给我指出正确的方向吗 class user(){ public function
class user(){
public function reset(){
$this->connect();
$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result))
{
$this->user_name=$row['dtype'];
$this->user_id=$row['user_id'];
$this->atype=$row['atype'];
$this->user_email=$row['user_email'];
$this->group1=$row['group1'];
$this->group2=$row['group2'];
$this->group3=$row['group3'];
$this->group4=$row['group4'];
$this->group5=$row['group5'];
$this->group6=$row['group6'];
}
// Test that these properties are actually being echoed on initial file... it is
// $this->user_name = "john";
// $this->user_email = "john@gmail.com";
// $this->dtype = "d";
// $this->atype = "f";
}
public function connect(){
//GLOBALS DEFINED IN INDEX.PHP
if ($db_open !== true){
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
// Check connection
if (mysqli_connect_errno())
{
$debug_system .= 'Error on user.php: ' . mysqli_connect_error().'<br\/>';
} else {
$db_open = true;
$debug_system .= 'user.php: user details grab successful. <br\/>';
}
}
}
class用户(){
公共功能重置(){
$this->connect();
$sql='SELECT*来自用户,其中user_id=“.”.$user_id.'”;
$result=mysqli\u查询($con,$sql);
while($row=mysqli\u fetch\u数组($result))
{
$this->user_name=$row['dtype'];
$this->user\u id=$row['user\u id'];
$this->atype=$row['atype'];
$this->user_email=$row['user_email'];
$this->group1=$row['group1'];
$this->group2=$row['group2'];
$this->group3=$row['group3'];
$this->group4=$row['group4'];
$this->group5=$row['group5'];
$this->group6=$row['group6'];
}
//测试这些属性是否在初始文件中实际被回响…确实如此
//$this->user_name=“john”;
//$this->user\u email=”john@gmail.com";
//$this->dtype=“d”;
//$this->atype=“f”;
}
公共功能连接(){
//INDEX.PHP中定义的全局变量
如果($db_open!==true){
$con=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称);
//检查连接
if(mysqli\u connect\u errno())
{
$debug_system.='user.php上的错误:'.mysqli_connect_Error()';
}否则{
$db_open=true;
$debug_system.='user.php:用户详细信息抓取成功';
}
}
}
}如果您对PHP OOP比较陌生,强烈建议您不要弄乱糟糕的mysqli API,而是首先学习非常明智的PDO,只有这样,熟悉OOP和准备好的语句,您才可以使用mysqli
然而,类
user
中不应该没有函数connect()
。您必须有一个独特的db处理类,该类实例必须在用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli
然而,类
user
中不应该没有函数connect()
。您必须有一个独特的db处理类,该类实例必须在用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli
然而,类
user
中不应该没有函数connect()
。您必须有一个独特的db处理类,该类实例必须在用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli
然而,类
user
中不应该没有函数connect()
。您必须有一个独特的db处理类,必须在user
class的构造函数中传递该实例。问题在于这一行:
$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义$user\u id
。大概你的意思是$this->user\u id
$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:
$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将准备
语句并绑定
用户ID,然后执行
查询:
$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:
while($row = mysqli_stmt_fetch($result))
如您所见,现代MySQL库的负载更大。在进一步使用MySQLi和参数化查询之前,我建议您对它们的工作原理做更多的研究(也许还有PDO:它是一个高级库)。这是值得努力的。问题在于这一行:
$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义$user\u id
。大概你的意思是$this->user\u id
$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:
$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将准备
语句并绑定
用户ID,然后执行
查询:
$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:
while($row = mysqli_stmt_fetch($result))
如您所见,现代MySQL库的负载更大。在进一步使用MySQLi和参数化查询之前,我建议您对它们的工作原理做更多的研究(也许还有PDO:它是一个高级库)。这是值得努力的。问题在于这一行:
$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义$user\u id
。大概你的意思是$this->user\u id
$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:
$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将准备
语句并绑定
用户ID,然后执行
查询:
$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:
while($row = mysqli_stmt_fetch($result))
如您所见,现代MySQL库的负载更大。我建议您对MySQLi和参数化查询的工作原理进行更多的研究