2014-08-30 65 views
0

你能解释我为什么我的代码不起作用吗?我一直在考虑这一段时间,我无法找到它。显然我想打印一些行列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; 
} 

它的工作原理,当我从选择命令删除状态,我无法弄清楚如何使它与它

$query = "SELECT * FROM qwozh_visforms_1"; 

现在即时得到这个错误的工作:

UNKNOWN COLUMN 'ADMIN' IN 'WHERE CLAUSE' SQL=SELECT * FROM QWOZH_VISFORMS_1 WHERE F1 = ADMIN RETURN TO PREVIOUS PAGE

感谢

回答

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扩展。

+0

这一个不工作,它说:UNKNOWN COLUMN'*'IN'FIELD LIST'SQL = SELECT'*'FROM'QWOZH_VISFORMS_1' Where'F1' ='ADMIN' 返回上一页 – tnqm 2014-08-30 20:05:41

+0

@tnqm - oops。我更新了代码。它现在会工作。 – Lodder 2014-08-30 20:11:42

0

您需要将名称用引号括起来:

$query = "SELECT * FROM qwozh_visforms_1 WHERE F1 = '".$user->username . "'"; 

正如我的答案有一个非常糟糕的质量,你可能想看看prepared statements评论中指出,expecially使用bindParam,这需要照顾的报价为你和保护你agains SQL注入攻击。

不幸的是,我不能建议你基于Joomla的方法,因为我从来没有使用它,别人可以建议你一个更合适的解决方案。

+0

如果你不打算建议在准备语句中绑定一个值,你至少应该建议使用'mysql_escape_string()'(折旧)。 – mstrthealias 2014-08-30 19:44:26

+0

@myninjaname你是对的,我的不好,我的Joomla知识非常糟糕,我不知道是否有特定的东西或建议准备好的陈述。 – 2014-08-30 19:45:11

+0

谢谢!这是非常奇怪的语法,在phpmyadmin中,它建议我将数据库名称用引号括起来,这是导致语法错误的原因。但由于某种原因,它不需要那里,虽然它需要比较。很奇怪。 – tnqm 2014-08-30 19:46:13

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); 
相关问题