Php 将值解析为mysql查询
我有一个快速的问题,我从一个表单中得到了username变量,我需要将它插入一个查询中,你能告诉我哪里出了问题吗,它说:“字段列表”中的未知列“$username” 代码如下:Php 将值解析为mysql查询,php,mysql,Php,Mysql,我有一个快速的问题,我从一个表单中得到了username变量,我需要将它插入一个查询中,你能告诉我哪里出了问题吗,它说:“字段列表”中的未知列“$username” 代码如下: echo $HTTP_POST_VARS['username']; echo $username; $query = sprintf( 'SELECT $username FROM hostess' ); -或者,如果这是一个字符串值,我怀疑您可能希望在查询文本中的单引号中包含它- $query = sp
echo $HTTP_POST_VARS['username'];
echo $username;
$query = sprintf( 'SELECT $username FROM hostess' );
-或者,如果这是一个字符串值,我怀疑您可能希望在查询文本中的单引号中包含它-
$query = sprintf( "SELECT '%s' FROM hostess", $username);
注意:生成的SQL语句看起来有点奇怪,因为它将为hostess表中的每一行返回相同的文本值。如果hostess表中有100行,那么将返回100行具有相同文本值的行。这可能是你想要的,但我觉得很奇怪
注意:sprintf函数在第一个参数中查找%s、%d等占位符,并用其余参数中的值替换它们。)
注意:如果$username
包含一个来自表单的值,并且该值未经验证,以阻止SQL注入攻击,我将使用(公认是老式的)mysql\u real\u escape\u string
函数。(其他人将提供更好、更现代的技术建议,以达到同样的效果。)
在PHP中,使用字符串的单引号不会解析变量的字符串。使用串联或双引号:
$query = sprintf( 'SELECT ' . $username . ' FROM hostess' );
$query = sprintf( "SELECT $username FROM hostess");
当然,这并不是说使用这种方式意味着的后var会带来可怕的风险。嗯,关于一切似乎都错了 首先,您从未定义变量$username。 您所做的仅在仍然支持子全局的PHP版本中有效 第二,为什么要使用sprintf进行查询 顺便说一句,HTTP_POST_VARS已被弃用。使用邮政 正确的代码应该是这样的
$username = $_POST['username'];
echo $username;
$query = mysql_query("SELECT ".$username." FROM hostess");
$username
李>
“从hostess中选择$username”
,但这根本不是有效的Sql语句李>
你会想要更像这样的东西:
$query = sprintf( "SELECT * FROM hostess WHERE username='%s'", $username);
确保清除$username后。嘿,谢谢,输出结果是:SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第1行“FROM hostess”附近使用的正确语法。我在localhost上。@Gazeta Almedicus:如果查询文本格式不正确,则是应该的。如果$username包含一个整数值,这应该不是问题。“从主持人中选择1”。如果$username是一个字符串,那么如果$username不是有效的SQL表达式,则可能会出现问题…很高兴听到!你能把我的答案标为正确答案吗?谢谢,我只需要再等4分钟就可以了:)谢谢你的建议!:)不要这样做。停止在进一步使用这种编码之前,请先阅读并了解。
$username = $_POST['username'];
echo $username;
$query = mysql_query("SELECT ".$username." FROM hostess");
$query = sprintf( "SELECT * FROM hostess WHERE username='%s'", $username);