当按用户名选择用户数据时,PHP Mysql查询不输出任何内容
我试图通过使用 以下代码,但它输出“无选择”。重要的是要注意,当我用数据库中的真实用户名替换“$username”时,它可以正常工作。这是完整的代码当按用户名选择用户数据时,PHP Mysql查询不输出任何内容,php,mysql,select,Php,Mysql,Select,我试图通过使用 以下代码,但它输出“无选择”。重要的是要注意,当我用数据库中的真实用户名替换“$username”时,它可以正常工作。这是完整的代码 <?php mysql_connect("localhost", "root", "")or die("cannot connect"); mysql_select_db("my_databse")or die("cannot select DB"
<?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' ];
?>
您需要理解“和”之间的区别
简单地说,PHP解释器将解析“between”文本,而“between”文本只是文本
在您的示例中,MYSQL将搜索用户名为“$username”的用户,而不是搜索变量$username的值
但是在您的例子中,$username需要加引号,否则MYSQL将无法工作。以下是您如何做到这一点:
$sql=“从用户名为“.$username.”的cv_用户中选择*代码>
希望这能有所帮助。你需要理解“和”之间的区别
简单地说,PHP解释器将解析“between”文本,而“between”文本只是文本
在您的示例中,MYSQL将搜索用户名为“$username”的用户,而不是搜索变量$username的值
但是在您的例子中,$username需要加引号,否则MYSQL将无法工作。以下是您如何做到这一点:
$sql=“从用户名为“.$username.”的cv_用户中选择*代码>
希望这有帮助。您确定php正确获取用户名吗?也许你可以先尝试回显用户名(或调试),这样你就可以确定你得到了用户名。你确定php得到了正确的用户名吗?也许你可以先尝试回显用户名(或调试),这样你就可以确定你得到了用户名。你的问题是你在寻找一个结果,并且你在php字符串变量周围添加了一个额外的“”,你可以删除它
您当前的查询:
$sql="SELECT * FROM cv_users WHERE username LIKE '$username'";
这表示您将在有用户名(如$username)的地方获取所有内容
这也是不正确的,因为您没有考虑字符串中的php变量
你可以把这个改成
$sql="SELECT * FROM cv_users WHERE username LIKE '".$username."'";
或
如果用户名匹配,则返回1个用户;如果用户名不匹配,则根本不会有结果
这将在稍后进行清理:
if( mysql_num_rows( $result ) === 1 ){
当您已经将$count
定义为mysql\u num\u行($result
)时,这里存在代码重复
当遇到这样的问题时,应该进行调试,在页面中回显SQL查询,然后直接执行到MySQL中,这会为您产生错误。您的问题是您正在查找1个结果,并且在php字符串变量周围添加了一个额外的“”,您可以删除该值
您当前的查询:
$sql="SELECT * FROM cv_users WHERE username LIKE '$username'";
这表示您将在有用户名(如$username)的地方获取所有内容
这也是不正确的,因为您没有考虑字符串中的php变量
你可以把这个改成
$sql="SELECT * FROM cv_users WHERE username LIKE '".$username."'";
或
如果用户名匹配,则返回1个用户;如果用户名不匹配,则根本不会有结果
这将在稍后进行清理:
if( mysql_num_rows( $result ) === 1 ){
当您已经将$count
定义为mysql\u num\u行($result
)时,这里存在代码重复
遇到这样的问题时,应该进行调试,在页面中回显SQL查询,然后直接在MySQL中执行该查询,这将为您产生错误。您的问题是,您正在查找与提供的用户名匹配的任何内容
$sql = "SELECT * FROM cv_users WHERE username LIKE '$username'";
您应该做的是获取用户名所提供的数据:
$sql="SELECT * FROM cv_users WHERE username = '{$username}'";
现在,使用PDO
(见脚注)可以更轻松地完成这项工作
我不会用勺子喂你所有的代码,其余的由你自己来实现:)
脚注
整体折旧,你应该避免使用它
从PHP5.5.0开始,此扩展已被弃用,不推荐使用
用于编写将来将被删除的新代码。相反,
应该使用mysqli或PDO_MySQL扩展
MySQL API概述,以获取选择MySQL API时的进一步帮助
您应该使用以下两种方法之一:
您的问题是您正在寻找与提供的用户名匹配的任何内容
$sql = "SELECT * FROM cv_users WHERE username LIKE '$username'";
您应该做的是获取用户名所提供的数据:
$sql="SELECT * FROM cv_users WHERE username = '{$username}'";
现在,使用PDO
(见脚注)可以更轻松地完成这项工作
我不会用勺子喂你所有的代码,其余的由你自己来实现:)
脚注
整体折旧,你应该避免使用它
从PHP5.5.0开始,此扩展已被弃用,不推荐使用
用于编写新代码,因为它将在将来被删除。相反
应该使用mysqli或PDO_MySQL扩展。另见
MySQL API概述,以获取选择MySQL API时的进一步帮助
您应该使用以下两种方法之一:
问题似乎出在Post方法上,因为我更改了它以使其正常工作。谢谢大家问题似乎出在Post方法上,因为我更改了它以使其正常工作。谢谢大家
“完整代码”
包括您的连接?您发布的用户名是什么?请在查询之前打印$username!!!它的值正确吗?你能格式化你的源代码吗?我已经很久没有看到这样的噩梦了:)事实上,我在sql查询之前尝试回显用户名,但它什么也没有输出。我看不出有什么问题?包括您的连接在内的“完整代码”
?您发布的用户名是什么?请在查询之前打印$username!!!它的值正确吗?请格式化好吗