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数组的主要内容,如果未能解决你的问题,请参考以下文章