2012-12-29 27 views
0

我已經構建了一個網站來爲我的小企業提交時間表。它使用SQL語句通過ODBC將數據提交給Microsoft Access數據庫。我現在注意到,無論何時在我的描述框中使用單引號,它都會給我一個錯誤。當我在描述框中使用單引號時發生SQL錯誤

我讀到了這個,聽到很多人說'參數化您的查詢',但我不確定如何做到這一點。

我有我的網站的HTML文本框,這樣

<textarea name="JobDescription" cols="75" rows="8" id="otherpurch"></textarea><br> 

這是一種形式的一部分,與其他各種東西一起提交。我如何處理在此框中鍵入的描述中包含單引號?我有一個名爲'submit_form'的.php文件,在那裏我可以想象這將是必須完成的。參數化查詢的一般過程是什麼?我對此有點困惑。

任何幫助非常感謝!

以下是數據如何從文本框發送到數據庫。

$JobDescription=$_POST['JobDescription']; 
$JobDescription=stripslashes($JobDescription); 
$JobDescription=mysql_real_escape_string($JobDescription); 

//make connection to database, bail if no connection 
$connection = odbc_pconnect('db','',''); 
if (!$connection) { exit("Connection Failed: " . $connection); } 

//Send data (usually there are many other variables being sent, but I removed them 
//for the purposes of showing you just the text being sent from the description box 

$sql = "INSERT INTO TimeSheet ('$JobDescription')"; 
$rs = odbc_exec($connection, $sql); 
if (!$rs) { exit("Error in SQL"); 
+0

的問題是不是在HTML,但在PHP代碼將數據保存到數據庫中。發佈。 – Lucero

+1

如果您沒有打開mysql_connect()資源,則不能調用mysql_real_escape_string()。換句話說,它不是一個通用的函數,可以使用任何數據庫API,並且它可能會返回一個空字符串... –

+3

好消息是,您瞭解了SQL注入的簡單方法:) – SWeko

回答

1

您打算使用參數化SQL是正確的,並且通過ODBC訪問也支持。

的職能,而不是使用odbc_exec,請參閱:
http://php.net/manual/en/function.odbc-prepare.php
http://php.net/manual/en/function.odbc-execute.php

$JobDescription=$_POST['JobDescription']; // no escaping needed! 

$connection = odbc_pconnect('db','',''); 
if (!$connection) { exit("Connection Failed: " . $connection); } 

$stmt = odbc_prepare($connection, "INSERT INTO TimeSheet (?)"); 
$rs = odbc_execute($stmt, array($JobDescription)); 
相關問題