我是oop风格的新手。我从上周开始练习它,我制作简单的CRUD网站。但是当我尝试从mysql db中获取行时,我遇到了一个问题,它始终显示1行。
我创建了一个名为class.user.php的类
,它显示在这里:
include "db_config.php";
class User{
private $db;
public function __construct(){
$this->connect();
}
private function connect($db_connect=true){
if ($db_connect){
$this->db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if(mysqli_connect_errno()) {
printf("DB Connect failed: %s\n", mysqli_connect_error());
exit;
}
}
}
public function get_tutoriallist(){
$db = $this->db;
if(empty($db)){
$this->connect();
$db = $this->db;
}
try {
$stmt = $this->db->prepare('SELECT * FROM `topic`');
$stmt->execute();
$result = $stmt->get_result();
$dataArray = array();
while($row = $result->fetch_assoc()){
$count_row = $result->num_rows;
if ($count_row == 1) {
$dataArray[] = $row;
}
}
return ($dataArray);
mysqli_close($db);
$this->db = null;
} catch (Exception $e) {
echo $e->errorMessage();
}
}
}
我用它来称呼它:
$data = $user->get_tutoriallist();
if (!empty($data)) {
foreach ($data as $row){
echo "<tr>";
echo"<td>".$row['category']."</td>";
echo"<td>".$row['title']."</td>";
echo"<td>".$row['detail']."</td>";
echo"<td>".$row['photo']."</td>";
echo"<td>".$row['video_link']."</td>";
echo"<td>".$row['date_post']."</td>";
echo"<td class='option'><center><a href ='#' class='edit'>Edit</a>
<a href='#'>Delete</a></center></td>";
echo "</tr>";
}
}else{
echo '<tr><td colspan="6"><center><h2>No entries</h2></center></td></tr>';
}
答案 0 :(得分:0)
这是因为仅在$current_row
== 1
时才附加到结果数组。
尝试更改你的while循环:
while($row = $result->fetch_assoc()){
$dataArray[] = $row;
}
此外,您没有正确关闭数据库连接,您正在将OOP样式与过程mysqli函数混合使用。这应该是这样的:
$this->db->close();
$this->db = null;
最后,在关闭连接后应该返回数据数组。如果您先返回数据数组并在之后关闭连接,则该代码将不会执行。
所以你的最后三行应该是这样的:
$this->db->close();
$this->db = null;
return $dataArray;
答案 1 :(得分:0)
我不太确定这里发生了什么:
while($row = $result->fetch_assoc()){
$count_row = $result->num_rows;
if ($count_row == 1) {
$dataArray[] = $row;
}
但通常情况下,您只需遍历结果并将它们附加到数组中:
while($row = $result->fetch_assoc()){
$dataArray[] = $row;
}
然后你的$datArray
包含了所有行。