2012-12-17 67 views
1

我正在嘗試編寫sql以將SQL代碼插入到表中的一列中。 該表具有以下三列:電子郵件,驗證碼,sql。將SQL代碼插入到PHP/MySQL中的數據庫中

我試試這個代碼,它的變體,與報價和backslashing玩弄/逃避它們,等等......可是,我的還是錯的:

INSERT INTO pre_registration(email, verification_code, sql) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"') 

它告訴我的SQL有錯誤語法:

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 'sql) VALUES('[email protected]', '89f0fd5c927d466d6ec9a21b9ac34ffa', "INSER' at line 1 

如何做到這一點?我正在使用PHP/MySQL。

+0

它報告什麼確切的錯誤?並在什麼RDBMS?它實際上看起來像它可以正常工作,對於大多數... –

+0

我已編輯的問題,包括錯誤。我使用php/MySQL。 – user961627

+1

'SQL'是[MySQL保留關鍵字](http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)您必須在反引號中引用它以用作列名稱。 –

回答

1

一些洞察到確切的SQL錯誤將有所幫助。乍一看,我會說你需要在表名和開括號之間以及值和開括號之間應用空格。

此外,SQL部分的雙引號周圍的單引號可能會創建錯誤,儘管我不確定。無論是單引號之間的字面解釋應該使轉義字符實際上在存儲的數據內部是斜線。

此外,sql是一個保留字,必須引用才能使用。

最後,根據您的情況有可能是使用準備和綁定參數數據輸入的更安全的方法:

try 
{ 
    $conn = new PDO ("sqlsrv:server = $serverstringname; Database = $logindatabase", "$loginusername", "$loginpassword"); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

catch (PDOException $e) 
{ 
    print("Error connecting to SQL Server."); 
    die(print_r($e)); 
} 

$email = '[email protected]' //or some other way of setting the variable like $_POST 
$verification_code = '#####' //or $_Post method 
$sql = 'Put Query Here' //probably have to declare this explicitly 

$sql_insert = "INSERT INTO pre_registration_info (email, verification_code, 'sql') VALUES (?,?,?)"; 
     $stmt = $conn->prepare($sql_insert); 
     $stmt->bindValue(1, $email); 
     $stmt->bindValue(2, $verification_code); 
     $stmt->bindValue(3, $sql); 
     $stmt->execute(); 
+0

''sql''應該包含反引號而不是引號。 – 2012-12-20 19:08:06

4

MySQL認爲sql作爲關鍵字。你必須引用它:

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"') 

順便說一句,雙引號來逃避他們,而不是使用bakslashes。這對SQL更友好。

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(''Mr.'')"') 
+0

在MySQL中,引號可以反斜線轉義 –

+0

@MichaelBerkowski好的,我已經重申了這個問題。 – kmkaplan

相關問題