【问题标题】:PHP mySQL ErrorPHP mySQL 错误
【发布时间】:2023-03-16 09:36:01
【问题描述】:

我是 php 新手,所以我决定关注 this tutorial 以获得简单的登录屏幕。我得到了代码设置,但是当我尝试登录时,我得到了这个错误:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in (a long file path to the script) on line 27

我从教程中得到的代码是:

<?php
ob_start();
$host="thehost"; // Host name
$username="myusername"; // Mysql username 
 $password="mypass"; // Mysql password 
 $db_name="test"; // Database name 
 $tbl_name="members"; // Table name

// Connect to server and select databse.
 mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
 mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
 $myusername=$_POST['myusername']; 
 $mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
 $myusername = stripslashes($myusername);
 $mypassword = stripslashes($mypassword);
 $myusername = mysql_real_escape_string($myusername);
 $mypassword = mysql_real_escape_string($mypassword);

 $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
 $result=mysql_query($sql);

// Mysql_num_row is counting table row
 $count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

 if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
 session_register("myusername");
 session_register("mypassword"); 
 header("location:login_success.php");
}
 else {
 echo "Wrong Username or Password";
}

 ob_end_flush();
?>

(注意:所有mySQL数据库信息都是在我的版本上填写的)

aslo,作者给出了一个php5版本和一个普通php版本。我已经尝试了两者并得到了同样的错误。如果有人知道为什么会发生这种情况,我们将不胜感激。

【问题讨论】:

    标签: php mysql login phpmyadmin


    【解决方案1】:

    您可以打印$sql 变量并自己尝试查询,或者使用mysql_error() 打印mysql 错误。 这个查询似乎失败了。

    【讨论】:

    • 会不会是我设置数据库的方式有问题?
    • @happyCoding25:可以。假设没有名为username 的列,则会发生错误。最好按照建议检查mysql_error()
    【解决方案2】:

    问题是mysql_num_rows 需要一个资源对象,但如果没有找到结果,它就会为空。不要以这种方式计算行数,只需检查if $result === null

    【讨论】:

    • 如果没有结果,mysql_num_rows 应该返回 0。如果 SQL 语句失败,它只会给出资源错误。
    【解决方案3】:

    您需要查看来自mysql_query()的退货;你不能假设它有效。如果是FALSE,调用mysql_error()从MySQL获取错误信息

    【讨论】:

      【解决方案4】:

      这就是我在 PHP 中进行数据库访问的方式:

      $result=mysql_query($sql) or die ("bad sql query: ".mysql_error());
      

      所以如果 SQL 错误;我得到一个可用的错误,通常是有罪的 SQL 片段

      【讨论】:

      • 好的,现在我收到此错误:错误的 sql 查询:表 'test.members' 不存在。关于下一步去哪里的任何想法?
      • @happy 创建那个表?本教程在步骤 1 中给出了 members 表的架构
      • 好的,我的数据库名称错误,但现在我收到错误:无法选择数据库....有什么想法吗?
      猜你喜欢
      • 2013-08-27
      • 2016-09-02
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2014-07-07
      • 2013-03-01
      • 2013-03-13
      相关资源
      最近更新 更多