2014-01-13 59 views
0

好吧,我有一个mysqli函数,从数据库中绘制一个用户统计。该datbase被设置为mysqli函数返回没有值

用户名攻击强度
XXXX 10 10 10

我运行到是功能没有返回的问题,该页面是空白。我连接到数据库目前和会话用户名存储,所以我可以找出为什么它不工作。

的config.php

<?php 
$dbhost = 'xxx'; 
$dbuser = 'xxx'; 
$dbpass = 'xxx'; 
$dbname = 'xxx'; 
$dberror1 = 'could not connect to database'; 
$dberror2 = 'could not find selected table'; 
?> 

stat.php

<?php 
function getLevel($stat) { 
require_once 'includes/config.php'; 

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

$stmt = $mysqli->prepare("SELECT ? FROM players WHERE username = ?"); 

if($stmt) { 
$stmt->bind_param('ss', $stat, $_SESSION['username']); 
if($stmt->execute()) { 
     $stmt->bind_result($result); 
     $stmt->fetch(); 
     } 
    } 
    return $result; 
    } 

?> 

,并使用测试在显示功能

<?php 
include 'includes/login-check.php'; 
include 'includes/config.php'; 
include 'includes/stat.php'; 

echo getLevel('attack'); 
?> 
+0

您是否检查了mysqli_error($ mysqli)的错误? –

回答

3

您不能绑定表 - 或列名的文件IM你准备好的陈述,只是价值观。

您必须检查$stat的值,并将其直接插入到sql语句中。

顺便说一句,您可以告诉mysqli引发异常,以便您不必手动检查每个数据库调用的返回值。在您打开数据库连接之前,只需添加以下内容:

mysqli_report(MYSQLI_REPORT_STRICT); 
+0

关于如何做到这一点的探讨将是很好的即时新的mysqli我jsut转换这从mysql – user3078244

+0

@ user3078244你的sql只是''选择\'$ stat \'从玩家where用户名=?“'但你会有以确保可以安全地使用'$ stat',例如通过将其与允许的列名称的白名单进行比较来检查它。 – jeroen

+0

我将不得不看看这个白名单的事情,但感谢您的信息 – user3078244