我正在尝试用PHP构建一个简单的数据库类,而我正在使用MySQL。
现在我已经坚持了,我无法弄清楚如何从数据库中显示一行结果。我已经解决了如何从数据库中获取多行但现在我只想显示一个像用户名,电子邮件,级别,reg_date。
我的代码:
class Database {
public $mysql;
function __construct()
{
$this->mysql = new mysqli(host, user, password, db) or die('There was a problem connecting to the db');
}
function multiLine($sql)
{
$this->mysql->query("SET NAMES 'utf8'");
$this->mysql->query("SET CHARACTER SET 'utf8'");
if(($result = $this->mysql->query($sql)) != NULL) {
$x = array();
while($row = $result->fetch_array()) {
$x[] = $row;
}
return $x;
}
else {
echo $this->mysql->error;
}
}
function singleLine($sql)
{
$one = array();
if(($one = $this->mysql->query($sql)) != NULL)
{
$one = $result->fetch_array(); // Error here
}
return $one;
}
function __destruct() {
// close out the database connection;
$this->mysql->close();
}
}
我的函数multiLine可以工作,我就这样使用它:
$db = new Database();
$sql = 'SELECT * FROM users ORDER BY id DESC';
$response = $db->multiLine($sql);
<?php foreach($response as $r) : ?>
<p>ID: <?php echo $r['id']; ?></p>
<p>Username: <?php echo $r['username']; ?></p>
<?php endforeach; ?>
那么有人可以给我一个如何解决问题的提示吗?或者也许某人有一个很好的tuturial链接,用于在PHP中创建数据库类。
答案 0 :(得分:1)
if(($one = $this->mysql->query($sql)) != NULL)
应该是
if(($result = $this->mysql->query($sql)) != NULL)
答案 1 :(得分:0)
我无法理解问题是什么,为什么你不添加LIMIT 1
来查询
答案 2 :(得分:0)
要将结果强制为一行,查询末尾的LIMIT 1
将会执行此操作。
如果您要检查结果是否恰好是一行,在将其发送到multiLine()或singleLine()之前,mysql_num_rows
会告诉您查询中有多少行。
我不确定你为什么要以不同方式处理它们,因为调用它的代码必须检查它是否被返回一个数组或一个对象。回报应该是一致的。
答案 3 :(得分:0)
从MySQL获得一行结果:
$val = fetch_one_record("SELECT some_field FROM some_table LIMIT 1);
function fetch_one_record($sql) {
$conn = db_connect();
$result = array_shift($conn->query($sql)->fetch_assoc());
$conn->close();
return $result;
}