mysqli bind_result()/只返回null

时间:2013-11-26 10:21:13

标签: php sql mysqli

我在mysqli的bind_result()fetch()函数方面遇到了一些麻烦。

我尝试过一些事情,包括回应结果:

$sql->prepare()
$sql->bind_param()
$sql->execute()
$sql->bind_result()

并且它们都返回true,返回false的唯一函数是$sql->fetch()

mysqli连接信息如下:

<?php
 $mysqli = new mysqli('localhost','false','data','battlestar');  

 if (mysqli_connect_errno()) {
  $siteOffline = 1;
  $smarty->assign("Fail", "Site is offline");
 }
?>

和我遇到麻烦的mysqli准备的声明在这里:     

$UID = "";
$userLevel = "";

if(isset($_POST['hidden'])){
$username = $_POST['username'];
$password = crypt($_POST['password']);

if($username != "" || $password != ""){
if($sql = $mysqli->prepare("SELECT UID, userLevel FROM users WHERE username=? AND   password=?")){

$sql->bind_param('ss', $username, $password);
$result = $sql->execute();

$res = $sql->bind_result($UID, $userLevel);

$sql->fetch();

var_dump($sql->error_list);

echo $UID . ' ' . $userLevel;
var_dump($sql);
if($result == NULL){
$smarty->assign("error", "Username or password invalid, please try again");
}
else{
$smarty->assign("confirmation", "Logged in Sucessfully");

$_SESSION['UID'] = $UID;
$_SESSION['username'] = $username;
$_SESSION['loggedIn'] = 1;
$_SESSION['userLevel'] = $userLevel;
}
}
}
else{
$smarty->assign("error", "You must enter a username and password");
}
}

$smarty->assign("content", $smarty->fetch("login.tpl"));
require_once("footer.php");
?>

我正在使用php 5.4和mysql 5.5

所以我的问题是我在查询中选择的字段和bind_result()只返回NULL并且我一遍又一遍地浏览bind_result()的文档但我似乎无法找到解。

抱歉,如果这是相当明显的或已经被问过我确实看过其他5个帖子,但没有一个是完全关系的。

如果需要更多数据,请告诉我您的需求。

2 个答案:

答案 0 :(得分:0)

通过阅读整个您的问题后,答案很明确 - 您的查询未返回任何结果 这是变量包含null的唯一原因。

答案 1 :(得分:-1)

如果$sql->fetch()返回false,则表示发生了错误。如果它返回null,则表示“不再有行”。通过发出var_dump($sql->error);来审核错误。

此外,如果您想从fetch()检索数据,您应该:

$sql->bind_result($UID, $userLevel);
while($sql->fetch()) {
  printf ("%d (%s)\n", $UID, $userLevel);
}

参考:mysqli_stmt::fetch on php.net