[英]PHP OOP with mySQLi fetch
我对PHP OOP还是比较陌生,我知道这里有很多关于SO的问题,但是没有一个问题可以为我指明正确的方向。 我已经创建了类用户,并且正在另一个文件中调用它。
我试图获取方法“重置”以调用“连接”,连接到mysql数据库,然后查询它,并将各种属性设置为行内容。
我没有收到任何错误,但是由于某种原因,它没有从数据库提供属性任何数据。
我试图将mySQL连接放置在reset方法中,只是为了查看变量是否无法在方法之间传递。 但是仍然没有喜悦。
谁能指出我正确的方向?
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\/>';
}
}
}
}
如果您是PHP OOP的新手, 强烈建议您不要使用糟糕的mysqli API,而要先学习相当明智的PDO ,然后再使自己熟悉OOP和准备好的语句,您可以使用mysqli。
但是,在类user
不应有函数connect()
。 您必须有一个独特的数据库处理类,该实例必须在user
类的构造函数中传递
问题出在这一行:
$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
实际上,您实际上没有定义$user_id
。 大概您实际上是指$this->user_id
。
$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
最好还是充分利用参数化查询 ,看起来像这样:
$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将prepare
语句并bind
用户ID,然后execute
查询:
$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:它是一个高级库)的工作方式之前,应做更多的研究。 这将是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.