你能解释一下为什么我的代码不起作用吗?我已经考虑了一段时间,我找不到它。显然我想从列F1等于用户名的行中打印一些列。
$db = JFactory::getDBO();
$user = JFactory::getUser();
$query = "SELECT * FROM qwozh_visforms_1 WHERE F1 = ".$user->username;
$db->setQuery($query);
$result = $db->query();
while($row = mysqli_fetch_object($result))
{
print $row->F1;
}
当我从select命令中删除条件并且我无法弄清楚如何使它与它一起工作时它起作用
$query = "SELECT * FROM qwozh_visforms_1";
现在我收到了这个错误:
UNKNOWN COLUMN'ADMIN'in'WHERE CLAUSE'SQL = SELECT * FROM QWOZH_VISFORMS_1在哪里F1 =管理员返回上一页
由于
答案 0 :(得分:2)
快速阅读Joomla文档即可。以下内容与您的查询相同,但充分利用了Joomla的最新数据库类:
$db = JFactory::getDbo();
$user = JFactory::getUser();
$query = $db->getQuery(true);
$query->select(array('*'))
->from($db->quoteName('#__visforms_1'))
->where($db->quoteName('F1') . ' = '. $db->quote($user->username));
$db->setQuery($query);
$results = $db->loadObjectList();
// Display the results
foreach($results as $result){
// echo what you want here
}
注意,我使用前缀#__
而不是手动定义qwozh
,假设您的表属于Joomla扩展名。
答案 1 :(得分:0)
您需要将名称用引号括起来:
$query = "SELECT * FROM qwozh_visforms_1 WHERE F1 = '".$user->username . "'";
正如评论中指出的那样,我的答案质量非常糟糕,您可能需要查看prepared statements,特别是使用bindParam
,它会为您处理报价并再次保护您的SQL注入攻击。
不幸的是,我不能建议你使用基于Joomla的方法,因为我从未使用它,其他人可以建议你一个更合适的解决方案。
答案 2 :(得分:0)
我知道PHP和MySQL,但不知道Joomla。但问题是您的用户名需要引用,因为它可能是一个字符串。
试试这个:
$query = "SELECT * FROM qwozh_visforms_1 WHERE F1 = '{$user->username}'";
或
$query = "SELECT * FROM qwozh_visforms_1 WHERE F1 = ".$db->quote($user->username);