Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将值解析为mysql查询_Php_Mysql - Fatal编程技术网

Php 将值解析为mysql查询

Php 将值解析为mysql查询,php,mysql,Php,Mysql,我有一个快速的问题,我从一个表单中得到了username变量,我需要将它插入一个查询中,你能告诉我哪里出了问题吗,它说:“字段列表”中的未知列“$username” 代码如下: echo $HTTP_POST_VARS['username']; echo $username; $query = sprintf( 'SELECT $username FROM hostess' ); -或者,如果这是一个字符串值,我怀疑您可能希望在查询文本中的单引号中包含它- $query = sp

我有一个快速的问题,我从一个表单中得到了username变量,我需要将它插入一个查询中,你能告诉我哪里出了问题吗,它说:“字段列表”中的未知列“$username”

代码如下:

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);