【问题标题】:mysqli bind_result()/ only returning nulmysqli bind_result()/ 只返回 null
【发布时间】: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 在他们的系统中使用相同的包装器。
  • 好吧,那我可怜他们。 如果他们真的使用这个包装器。

标签: php sql mysqli


【解决方案1】:

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

【讨论】:

  • 感谢您的快速响应。所以你会建议我重新查看我的查询吗?
  • 最好重新查看您的数据,一个存储在数据库中,一个您正在输入表单。它必须匹配。
【解决方案2】:

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

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

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

参考:mysqli_stmt::fetch on php.net

【讨论】:

  • “工作代码”与“这意味着发生了错误。”声明有关
  • 发生的错误来自 php.net 文档。仔细阅读@YourCommonSense(尤其是在返回值部分)。谢谢!
  • 好的,我重新读了一遍。与提出的问题没有任何关系。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2021-11-26
相关资源
最近更新 更多