php sql试图将用户名变量传递给sql数组

Posted

技术标签:

【中文标题】php sql试图将用户名变量传递给sql数组【英文标题】:php sql trying to pass username variable to sql array 【发布时间】:2011-09-05 23:00:17 【问题描述】:

抱歉,我不太擅长 php 和 SQL。我有一个用户名,它似乎可以正常工作,因为我可以回显它,这是正确的。如下所示。

  echo 'Username: ' . $current_user->user_login . "\n";
  echo 'User email: ' . $current_user->user_email . "\n";
  echo 'User first name: ' . $current_user->user_firstname . "\n";
  echo 'User last name: ' . $current_user->user_lastname . "\n";
  echo 'User display name: ' . $current_user->display_name . "\n";
  echo 'User ID: ' . $current_user->ID . "\n";

?>

这很好用。

我在课堂上有一个函数。我认为我可以只传递一个用户名等于该变量的 SQL 语句,如下所示。但是,这似乎不起作用。

protected function _scandir($id) 
        $files = array();
        $sql   = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime, f.mime, f.width, f.height, f.username, ch.id AS dirs 
                WHERE f.username = $username
                FROM '.$this->tbf.' AS f 
                LEFT JOIN '.$this->tbf.' AS ch ON ch.parent_id=f.id 
                AND f.parent_id="'.$id.'"
                GROUP BY f.id';

        if ($res = $this->query($sql)) 
            while ($r = $res->fetch_assoc()) 
                $id = $r['id'];
                $this->stat($id, false, $r);
                $files[] = $id;
            
        
        return $files;
    

我在这里错过了什么愚蠢或明显的东西。我只需要传递用户名变量并使用它来查询数据库。

这是原始查询 $

受保护的函数 _scandir($id) $files = 数组(); $sql = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime, f.mime, f.width, f.height, f.username, ch.id AS dirs FROM '.$this->tbf.'作为 f 左加入'.$this->tbf。' AS ch ON ch.parent_id=f.id WHERE f.parent_id="'.$id.'" AND f.username="'.$username.'" GROUP BY f.id';

    if ($res = $this->query($sql)) 
        while ($r = $res->fetch_assoc()) 
            $id = $r['id'];

            $this->stat($id, false, $r);
            $files[] = $id;
        
    

    return $files;

【问题讨论】:

你的一些代码被截断了,点击编辑按钮! 对不起,我刚刚改了。 【参考方案1】:

您不能使用单个 qoute 将变量添加到字符串。除此之外,当你添加一个字符串来查询时,你必须把它放到qoutes中。

除此之外,您的查询也是错误的。我

试试这个:

 $sql   = "
    SELECT f.id, f.parent_id, f.name, f.size, f.mtime, f.mime, f.width, f.height, f.username, ch.id AS dirs 
    FROM ".$this->tbf." AS f 
    LEFT JOIN ".$this->tbf." AS ch ON (ch.parent_id=f.id AND f.parent_id=".$id.")
    WHERE f.username = '".$username."'
    GROUP BY f.id
    ";

假设 $username 和 f.username 是一个字符串, $id 和 f.parent_id 是整数

【讨论】:

我刚试过。它似乎运行查询但返回所有结果。我有.protected function _scandir($id) $files = array(); $sql = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime, f.mime, f.width, f.height, ch.id AS dirs FROM '.$this->tbf 。 AS f LEFT JOIN '.$this->tbf.' AS ch ON ch.parent_id=f.id WHERE f.parent_id="'.$id.'" AND f.username = "'.$username.'" GROUP BY f.id'; if ($res = $this->query($sql)) while ($r = $res->fetch_assoc()) $id = $r['id']; $this->stat($id, false, $r); $files[] = $id; 返回 $files; 由于 $id 是唯一的,对我来说似乎没有必要使用带有用户名的 where。你为什么那样用它。关于结果,您可以使用内部联接。它应该使它工作。试试这个: $sql = "SELECT f.id, f.parent_id, f.name, f.size, f.mtime, f.mime, f.width, f.height, f.username, ch.id AS dirs FROM ".$this->tbf." AS f INNER JOIN ".$this->tbf." AS ch ON ch.parent_id=f.id where f.parent_id=".$id; 感谢 Bahadır 的回复,但仍然不高兴。我想知道对于问题的第一部分,用户名变量是否没有传递给类函数。我不确定如何传递用户名变量。我是否在某处将其声明为全球性的。它必须传递给类中的函数。基本上我只需要让它说获取用户名等于某个值的 ID。我希望你能帮忙。

以上是关于php sql试图将用户名变量传递给sql数组的主要内容,如果未能解决你的问题,请参考以下文章

将php数组传递给sql查询[重复]

将Javascript数组传递给PHP文件[重复]

将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数

Rails - 将current_user传递给SQL查询

AJAX 变量传递给 SQL 但不传递给 PHP

PHP 通过 SQL 查询中的 Href 链接将变量传递给弹出页面