2011-08-30 114 views
0

有人能告訴我什麼是錯誤的我的sql查詢sintax?Mysql查詢語法問題

也有任何方式在MySQL中獲取查詢的確切錯誤?

<?php 
// If the constant _JEXEC is not defined, quit now. 
// This stops this script from running outside of the system. 
defined('_JEXEC') or die('Restricted access'); 
?> 
<script type="text/javascript" language="javascript"> 
function proceed() 
{ 
check = document.getElementById('checkToProceed'); 
proceedButton = document.getElementById('proceedButton'); 

if (check.checked) 
{ 
proceedButton.disabled = false; 
} 
else 
{ 
proceedButton.disabled = true; 
} 
} 
</script> 

<?php 


if ($_POST['proceedButton'] != '') { 
$user = JFactory::getUser(); 
$id = $user->get('id'); 
$name = $user->get('name'); 
$username = $user->get('username'); 
$department = $user->get('department'); 
$vardate = date("m/d/y : H:i:s", time()); 
$acknowledge = 1; 
$courseTitle = $mainframe->getPageTitle(); 


/***************************************/ 

$db = &JFactory::getDBO(); 
$query = "INSERT INTO `jos_jquarks_users_acknowledge`(course_name)VALUES('hello')"; 
$db->setQuery($query); 

$db->query(); 

echo mysql_error(); 


if($db->getErrorNum()) { 
    JError::raiseError(500, $db->stderr()); 
} 

} 
?> 
<form name="quiz_info" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 

<input type="checkbox" id="checkToProceed" name="checkToProceed" onclick="proceed();" /> 

<label for="checkToProceed"> 

<?php echo JText::_('I have Read and Acknowledge the procedure'); ?> 

</label> 

<input id="proceedButton" name="proceedButton" disabled="true" value="Acknowledge" type="submit" /> 

<input type="hidden" name="layout" value="default" /> <?php echo JHTML::_('form.token'); ?> 

</form> 
+0

您有字段名稱'timestamp'嗎?更改該名稱或在其周圍使用bacticks。 –

+0

我想插入執行插入的實際時間。這是正確的方式來聲明一個變量來得到這個嗎? – Tony77

+0

這很好,是的。關注的是該字段的名稱'時間戳' - 他擔心它可能是保留字。實際上,它不是:http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html –

回答

1

我認爲它可能是一對夫婦的事情,但有拼寫錯誤用「確認」。它在插入的列列表中以及您在INSERT聲明中使用的變量拼寫錯誤。分配該變量時拼寫正確。

編輯:通過這個與OP聊天工作。問題在於這段代碼被用作Joomla文章中的片段。表格的帖子必須去$_SERVER['REQUEST_URI']才能發回到正確的位置。

+0

也許該字段在數據庫中也拼寫錯誤... –

+0

這是可能的,但值得指出。無論如何,變量名稱在設置時拼寫正確,但在使用時拼寫不正確。 –

+0

我改變和檢查變量和表列,他們現在allo拼寫正確,但這並沒有解決問題,我添加如果($ Db-> getErrorNum()){JError :: raiseError(500,$ Db - >標準錯誤()); }但是頁面在替換錯誤之前似乎正在重定向 – Tony77

-1

沒有錯誤,表結構是有點辛苦,但...

也許你要插入一個int數據類型爲字符串,例如USER_ID。使用數字值時刪除'',因爲它們不是字符串。

例如:

INSERT INTO table_name 
(id_field, string_field) 
VALUES 
({$id_value}, '{$string_value}'); 
+2

-1 - 數字字段周圍的引號雖然可能不明智,但不會導致錯誤。 –

+0

我想我可以通過使用這個解決:'if($ Db-> getErrorNum()){JError :: raiseError(500,$ Db-> stderr()); }' – Tony77

+0

但是沒有錯誤提出,除非張貼到另一個頁面,我被重定向到網站的主頁,meabe這就是爲什麼我沒有看到錯誤? – Tony77

1

mysqli_error()或mysql_error()。

3

mysql_errordocs)將返回數據庫中的最後一個錯誤。

順便說一句,您的代碼看起來會執行兩次查詢。只能使用一個$db->query()的電話。

至於什麼,如果有什麼不對,這很難說。我沒有看到任何明顯的錯誤,但我不知道如何轉義您在查詢中使用的值。請參閱文檔mysql_real_escape_string - 如果這些值中的任何值包含撇號,您的查詢將被打破。

我也看到拼寫錯誤,「acknoledge」拼寫爲「確認」,所以如果該字段在數據庫中拼寫正確,那麼在查詢中拼寫錯誤將會出現問題。在同一註釋中,您的某些字段使用underscores_names,其中一些使用camelCase名稱。你只是乞討這樣的錯字。使用一種命名約定或其他命名約定,並保持一致。如果您的字段名稱爲employeeNumber,並且您使用employee_numberEmployeeNumber,則查詢將失敗。選擇一個命名約定並堅持下去,以免每次編寫查詢時都會猜測!

+1

+1瞭解詳細的答案 – bpgergo

1

使用mysql_error

+0

我應該在哪裏放置回聲mysql_error(); ??? – Tony77

+0

執行查詢後立即在'$ db-> query()'行下。另外,正如我在我的回答中所指出的,您正在代碼中執行兩次查詢... –