PHP Mysql查询在按用户名选择用户数据时不输出任何东西


PHP Mysql query out puts nothing when selecting users data by username

我试图显示用户的数据从我的mysql表通过用户名选择他们使用下面的代码,但是它输出'no selection'。这里需要注意的是,当我用数据库中的真实用户名替换'$username'时,它可以正常工作。这里是完整的代码。

                      <?php 
            mysql_connect("localhost", "root", "")or die("cannot connect"); 
            mysql_select_db("my_databse")or die("cannot select DB"); 
             mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error());
       $username=$_POST['username']; 
       $username = mysql_real_escape_string($username); 
       $sql="SELECT * FROM cv_users WHERE username LIKE '$username'"; 
       $result=mysql_query($sql); 
       $count=mysql_num_rows($result); 
       if( mysql_num_rows( $result ) === 1 ){ 
        $row = mysql_fetch_assoc( $result ); 
        $email = $row[ 'email' ];
        $cv_txt = $row[ 'cv_txt' ];
         $cv_txt = mysql_real_escape_string($cv_txt); 
         } 
         else { 
        echo 'no selection'; 
          }
           ?>
          <?php 
           echo $row[ 'cv_txt' ]; 
          ?>

您的问题是您正在寻找1个结果,并且您正在添加额外的" php字符串var,您可以删除此'。

当前查询:

$sql="SELECT * FROM cv_users WHERE username LIKE '$username'"; 

这表示您将获取包含用户名的所有内容,例如$username这也是不正确的,因为您没有考虑字符串内的php var。

你可以把它改成

$sql="SELECT * FROM cv_users WHERE username LIKE '".$username."'"; 

$sql="SELECT * FROM cv_users WHERE username = '".$username."'"; 

如果用户名匹配,则返回1个用户,如果不匹配,则根本没有结果。

这将在后面清理:

if( mysql_num_rows( $result ) === 1 ){ 

当您已经将$count定义为mysql_num_rows( $result时,这里存在代码重复。

当遇到这样的问题时,应该进行调试,在您的页面中回显SQL查询,然后直接在MySQL中执行该查询将为您产生错误。

您的问题是您正在寻找与所提供的用户名匹配的任何

$sql = "SELECT * FROM cv_users WHERE username LIKE '$username'";

你应该做的是获取用户名的数据:

$sql="SELECT * FROM cv_users WHERE username = '{$username}'"; 

现在使用 PDO (见脚注)

就容易多了
$db = new PDO("...");
$statement = $db->prepare("SELECT * FROM cv_users WHERE username = :username");
$statement->execute(array(':username' => $username));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator

我不会把所有的代码都塞给你,剩下的就看你自己的实现了:)


脚注

整个php mysql_* api是贬值的,你应该避免使用它。

此扩展在PHP 5.5.0中已弃用,不推荐使用用于编写新代码,因为它将在将来被删除。相反,应该使用mysqli或PDO_MySQL扩展名。参见在选择MySQL API时提供更多帮助。

你应该使用以下两个中的一个:

  • PDO
  • MySQLi

你需要理解"answers"之间的区别。

简单地说,"之间的文本将被php解释器解析,而'之间的文本将只是文本。

在您的示例中,MYSQL将搜索用户名'$username',而不是搜索变量$username的值。

但是在你的情况下$username需要引号,否则MYSQL将无法工作。你可以这样做:

$sql="SELECT * FROM cv_users WHERE username LIKE '".$username."'";

你确定php得到正确的用户名吗?也许您可以先尝试回显用户名(或调试),这样您就可以确定您获得了用户名。

似乎问题在于Post方法,因为我更改了它以使其正常工作。谢谢大家