【问题标题】:PHP MySQL unable to jump to row 0PHP MySQL无法跳转到第0行
【发布时间】:2015-09-10 11:19:20
【问题描述】:

我最近开始学习 web 开发,对于第一个项目,我们必须制作一个非常简单的登录和注册功能。现在我到了某个地方,但突然我开始收到这个错误。

无法跳转到 MySQL 结果索引 4 上的第 0 行。

这是我得到错误的代码。

$conn = mysql_connect($servername, $username, $password, $database) or die("!Server");

if(!$conn){
    die("Connection error: " . mysql_error());
}else{
    echo "connection made";
}

$select_db= mysql_select_db($database, $conn);

if(!$select_db){
    die("Database selection failed:: " . mysql_error());
}else{
    echo "database selected";
}

$login_user = $_GET['username'];
$select_password = "SELECT `password` FROM `members` WHERE `username` = '$login_user'";
$result = mysql_query($select_password);

if(!$result){
    die("Could not fetch the data " . mysql_error());
}

$password = mysql_result($result, 0);

echo $password;

我知道还有其他帖子在问同样的问题,但没有一个真正有帮助。

希望有人能够帮助我。

感谢阅读:)

【问题讨论】:

  • 直接在数据库中运行这个查询并检查结果!!
  • 确保在查询中输入 $login_user 之前已设置。可以在查询前使用 !empty() 检查
  • 注意:mysql_* 函数已被弃用,它们将在以后的版本中从 PHP 中删除,届时您的代码将停止工作。您不应该使用它们编写新代码,而是使用mysqli_* or PDO
  • 你能发布 $result 和 $password 的 dd 结果吗?
  • 如果您刚开始学习 php 和 mysql,我强烈建议不要学习 mysql。帮自己一个忙,学习使用最现代的语言pdo_mysql

标签: php mysql login registration


【解决方案1】:

这行可能是:

password = mysql_result($result, 0);

当它不匹配任何内容时无法获取行,这就是您收到错误的原因。

试试吧:

if( $password = mysql_fetch_assoc($result) ) {
    echo $password['password'];
} else {
    echo 'no match';
}

看看有没有帮助。

但是,您确实应该从 mysql_* 转移到 PDO 或 mysqli。

【讨论】:

  • 如果没有找到结果,这仍然会弹出错误消息。
  • 你是对的,我将 mysql_result 更改为 mysql_fetch_assoc 以避免错误。感谢您的注意。只是复制粘贴错误的部分。
【解决方案2】:

我建议使用 PDO,而不是 mysql_... 函数。 不仅因为它更新且面向对象,还因为 mysql... 已被弃用。
所以我的答案是使用 PDO

从您的代码示例中,我假设您有服务器名称、数据库、用户名和密码的变量。因此与 PDO 的连接将如下所示:

$con = new PDO("mysql:host=$servername;dbname=$database", $username, $password);

然后你可以使用filter_input 来获取你的$_GET 参数,这也是更建议的。简单的赋值如下所示:

$login_user = filter_input(INPUT_GET,'username');

然后像这样运行和获取查询:

$result_query = $con->query("SELECT `password` FROM `members` WHERE `username` = '$login_user'");
$result = $result_query->fetch(PDO::FETCH_ASSOC);

现在 $result 是一个关联数组,所以要获取密码只需使用:

echo $result['password']; 

【讨论】:

    【解决方案3】:

    非常感谢您的帮助 :) 从这些答案中我得到了我需要的一切,现在我也将切换到 PDO 以获得最终版本,尽管我现在将留在 MySQL 上,因为我必须通过周一。

    非常感谢:)

    【讨论】:

    • 这不是您问题的答案。如果其中一个答案反映了您的解决方案,请将其标记为已解决。您可以在评论中表示感谢。
    【解决方案4】:

    改变这个:

    $select_password = "SELECT `password` FROM `members` WHERE `username` = '$login_user'";
    

    进入这个:

    $select_password = "SELECT password FROM members WHERE username = '$login_user'";
    

    【讨论】:

    • 为什么要改变一些东西?
    • 因为您现在正在查看表格。您应该查看表格中的数据。
    • 您只从查询中删除了`。这应该不会改变任何事情。
    • 也许您可以将 username = '$login_user' "; 更改为 username = ' " 。 $登录用户;一切都与精确编码有关。
    • 这不会再有任何改变(你忘了用' 关闭应该是username = ' " . $login_user . "'"; [仍然没有改变])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2019-04-07
    • 2017-02-13
    相关资源
    最近更新 更多