【发布时间】:2013-11-26 10:21:12
【问题描述】:
我在使用 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 个帖子,但没有一个是完全相关的。
如果需要更多数据,请告诉我您需要什么。
【问题讨论】:
-
看在上帝的份上,不要使用 mysqli。这比普通 PHP 用户所能忍受的要难。请改用PDO。
-
@YourCommonSense 我部分同意你的看法。 PDO 的学习曲线比 MySQLi 更陡峭,因为它的语法与传统的已弃用
mysql_*库完全不同。如果您使用轻量级 DB 包装器,MySQLi 就可以了,例如 PHP DB Manager。 -
@ShivanRaptor 像大多数包装器一样,这让事情变得更糟。
-
不太同意你的看法。 Microsoft 和 FedEx 在他们的系统中使用相同的包装器。
-
好吧,那我可怜他们。 如果他们真的使用这个包装器。