我在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个帖子,但没有一个是完全关系的。
如果需要更多数据,请告诉我您的需求。
答案 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);
}