我试图显示用户的数据从我的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 = "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方法,因为我更改了它以使其正常工作。谢谢大家