2014-08-30 167 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); 
相關問題