簡體   English   中英

如何在SQL語法中調試錯誤?

[英]How to debug an error in SQL syntax?

我是SQL / PHP的新手,我無法克服錯誤消息:

"You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '1',"

我正在嘗試調試此錯誤,但我在腳本中查找“1”並且我只有這一點:

//enter information into table
$sql = "INSERT INTO $_SESSION[table_name] VALUES 
        ('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]', 
           password('$_POST[password]'), 'Administrators', '', '', '0', '$_SESSION[admin_email]',
          '$_POST[redirect_to]', '1', '$date')";

$result = @mysql_query($sql,$connection) or die(mysql_error());

if($result)
{...
  1. 我沒有發現任何問題。

  2. 我不知道如何調試這個,我該如何繼續查找錯誤? 任何線索?

我不確定我是否在正確的位置查看腳本,但這是我有'1'的唯一條目,錯誤消息告訴我要看...

檢查手冊后,SQL中的語法似乎是正確的......我在WAMP服務器中使用MySQL 5.5.24

我正在嘗試安裝“ Login-Redirect v1.31 ”進行用戶身份驗證。

如果有人能幫助我,我真的很感激!

在您使用此代碼進一步了解之前,請閱讀有關SQL注入攻擊修復您的代碼的信息

您的語法錯誤幾乎肯定是由注入錯誤引起的,毫無疑問是來自您插入查詢的數據中'某個地方。 您將原始用戶提供的數據傳遞到查詢中,允許惡意用戶接管您的服務器,銷毀您的數據庫,踢你的狗等等......

除此之外,執行echo $sql並將結果粘貼到此處,我們將能夠准確地向您顯示錯誤'位置。

第一步是隔離查詢的哪個部分引用。

您的錯誤是引用列,並插入字段。

我看到你傳遞'1' '1'是一個字符串,而1是一個整數。

如果Column Schema說它是int列類型,則刪除單引號並再試一次。

對於初學者這樣做:

  1. 使用echo語句將$ sql打印到屏幕(或將其記錄到文件中)。

  2. 將語句復制到您喜歡的SQL編輯器並完成它,嘗試找到錯誤。

在不知道執行代碼時綁定到哪些變量的情況下,很難調試動態SQL語句。

非常感謝你幫我解決這個問題。

在變量上打印$echo給了我答案。 問題是$_POST[redirect_to]無法正常工作,因為它之前沒有很好地定義。

我將輸入變量更改為空字符串並且它有效:

$sql = "INSERT INTO $_SESSION[table_name] VALUES 
        ('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]', 
        password('$_POST[password]'), 'Administrators', '', '', '0', 
        '$_SESSION[admin_email]', ' ', '1', '$date')";

$result = @mysql_query($sql,$connection) or die(mysql_error());

if($result){
    // ...
}

我將研究SQL injections的漏洞並將其解決,我對此非常陌生。

感謝您的更正和提示!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM