谁能解释一下
为什么不工作?
<?php
class category
{
function __construct()
{
$con = new mysqli("localhost", "root", "", "whatever");
}
function show_all()
{
$sql = "SELECT id_kategori, nama_kategori FROM kategori";
$stmt = $con->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $cat);
while($stmt->fetch())
{
echo "<td>$id</td>";
echo "<td>$cat</td>";
echo "<td>Update</td>";
echo "<td>Delete</td>";
};
$stmt->close();
}
}
?>
但这行得通吗?
<?php
class category
{
function show_all()
{
$con = new mysqli("localhost", "root", "", "whatever");
$sql = "SELECT id_kategori, nama_kategori FROM kategori";
$stmt = $con->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $cat);
while($stmt->fetch())
{
echo "<td>$id</td>";
echo "<td>$cat</td>";
echo "<td>Update</td>";
echo "<td>Delete</td>";
};
$stmt->close();
}
}
?>
不带构造就行,带构造就不行。
谁能告诉我,告诉我,教我如何包括sql连接在一个结构的正确方式?我还是个新手,还在不断学习。
这是因为作用域。应该将$con
变量定义为专门在类中使用,而不是仅在__construct
中局部使用。
当您在__construct
中定义$con
时,您将其范围限定为在函数__construct
中本地使用,而不是在类本身中使用
考虑下面的代码
<?php
class category
{
private $con;
function __construct()
{
$this->con = new mysqli("localhost", "root", "", "whatever");
}
function show_all()
{
$sql = "SELECT id_kategori, nama_kategori FROM kategori";
$stmt = $this->con->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $cat);
while($stmt->fetch())
{
echo "<td>$id</td>";
echo "<td>$cat</td>";
echo "<td>Update</td>";
echo "<td>Delete</td>";
};
$stmt->close();
}
}
?>
$con在上面的类中不是一个可访问的变量:试试这个:
<?php
class category
{
private $con = NULL;
function __construct()
{
$this->con = new mysqli("localhost", "root", "", "whatever");
}
function show_all()
{
$sql = "SELECT id_kategori, nama_kategori FROM kategori";
$stmt = $this->con->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $cat);
while($stmt->fetch())
{
echo "<td>$id</td>";
echo "<td>$cat</td>";
echo "<td>Update</td>";
echo "<td>Delete</td>";
};
$stmt->close();
}
}
?>
,看看这里的文档:http://php.net/manual/en/language.oop5.php并查找PHP作用域:http://php.net/manual/en/language.variables.scope.php
同样,如果你有问题总是添加到你的代码:这将告诉您变量未定义:
error_reporting(E_ALL);
ini_set('display_errors', '1');