我想显示属于某个用户名的变量“points”。
这是我的login2.php文件的一部分:
if(isset($_SESSION['username'])){
$username=$_SESSION['username'];
$points = $mysqli->query("SELECT points FROM account_information WHERE username = '".$username."'");
}
我现在不知道如何展示这些要点。我知道$ points的结果不是属于用户名的点数。我其实想知道如何做到这一点以及$积分的结果。如何显示我正在运行的查询的实际结果?(这将是我的数据库中存储的点的数量所以当然如果你在mysql中运行这个查询,那么结果将是: “点数量”,但在这种情况下,我不知道如何实际显示点数。
答案 0 :(得分:3)
执行AND FETCHING sql / results后,“points”值为。
获取行 http://www.php.net/manual/de/mysqli-result.fetch-row.php
$sql_result = $mysqli->query("SELECT points FROM account_information WHERE username = '".$username."'");
while ($data_row = mysqli_fetch_assoc($points)) {
print 'Your score is: '.$data_row['points'];
}
答案 1 :(得分:3)
while ($row = mysqli_fetch_assoc($points)) {
echo $row['points'];
}
只需将结果放入名为$ row的数组中,然后使用$ row ['points']访问数组的各个部分。
答案 2 :(得分:1)
我认为混合对象和程序风格也是非常糟糕的做法。
另外,其他答案不关心安全性。使用预准备语句并重新选择用户名,因为在这种情况下mysqli会验证您的$_SESSION['username']
。
看一下这个:
<?php
// Init the database connection
$db = new mysqli("example.com", "user", "password", "database");
// Look for errors or throw an exception
if ($db->connect_errno) {
throw new Exception($db->connect_error, $db->connect_errno);
}
// Init prepared statement
$prep = $db->stmt_init();
// Prepared statement
$prep = $db->prepare("SELECT username, points FROM account_information WHERE username = ? AND username IS NOT NULL AND username != ''");
// See if statement is ok
if (!$prep) {
throw new Exception($db->error);
}
// Put your variables into the query
$prep->bind_param('s', $_SESSION['username']);
// Fire the query!
$prep->execute();
// This is magic, it's awesome.. try it :-))
$prep->bind_result($username, $points);
// Get the results easily
while ($prep->fetch()) {
echo "{$username} has {$points}<br>", PHP_EOL;
}
// This is like in our house, when we leave it, we close the door
$prep->close();
$db->close();
<强>更新强>
回答你的评论,这种风格更好,因为对象总体上比程序功能更好。更好地编程,更好地阅读,更容易理解(来自现实生活对象的对象摘要)。
bind_param
验证您的输入。想象一下,我将;DROP TABLE account_information;--
放入我的用户名会话中。这是 SQL注入 - 阻止它们的唯一安全方法是 prepare
语句。或者想象一下多个数据库连接。每个mysqli对象代表一个不同的连接。这不像程序风格那么清楚。此外,使用例外的错误报告更加灵活,因为它们可以catch
和throw
n。
如果您想了解更多关于他们的回报,只需阅读手册:http://php.net/mysqli_query
mysqli_query / mysqli::query
返回值:
失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于 其他成功的查询mysqli_query()将返回TRUE。