2013-03-14 42 views
0

我對PHP很陌生,並被告知我的MySQL語句對注入不安全。保護我的MySQL查詢

有我的老查詢:

$addbook = "INSERT INTO bookings (bookID, startDate, startTime, endDate, endTime) "; 
$addtempres .= "VALUES ('".$bookid."', '".$startdate."', '".$starttime."', '".$enddate."', '".$endtime."')"; 
$insertBook = mysql_query($addbook); 

$getblogposts = mysql_query("SELECT * FROM blogposts WHERE deleted = 'no' ORDER BY postID DESC LIMIT 4"); 

閱讀它,我明白他們是不安全的,我也明白的mysql_query舊,並且正在貶值。

然而,我寫了很多這些查詢,並意識到他們都是舊的,不安全的是令人生畏的,所以我開始試圖保護他們。

所以我這樣做:

$escapedbookid = mysql_real_escape_string($bookid) ; 
$escapedstartdate = mysql_real_escape_string($sqlcoldate); 
$escapedstarttime = mysql_real_escape_string($forstarttime); 
$escapedenddate = mysql_real_escape_string($sqlretdate); 
$escapedendtime = mysql_real_escape_string($forendtime); 
$escapedactive = mysql_real_escape_string('false'); 

$addtembook = "INSERT INTO bookings (bookID, startDate, startTime, endDate, endTime) "; 
$addtempres .= "VALUES ('".$escapedbookid."', '".$escapedstartdate."', '".$escapedstarttime."', '".$escapedenddate."', '".$escapedendtime."')"; 
$insertRes = mysql_query($addtempbook); 

這是更安全?我很欣賞PDO準備好的聲明,當我學會將當前的查詢翻譯成它們時,它更容易也更安全,但我只是想知道我正在做的是讓事情更安全還是不安全?

+2

'mysql_'代碼很快就會被棄用,原因很多,安全就是其中之一。我強烈建議你看看mysqli:http://us2.php.net/manual/en/mysqli.overview.php – Andy 2013-03-14 11:50:47

+1

[**請不要在新代碼**中使用'mysql_ *'函數](http ://bit.ly/phpmsql)。他們不再保留[並正式棄用(https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://www.brightmeup.info/article.php?a_id=2)。 – insertusernamehere 2013-03-14 11:52:11

+1

@Andy是否也讓mysqli使事情變得更加安全,還是隻跟上最佳實踐? – TryingToBeZen 2013-03-14 11:53:53

回答

1
  1. 停止使用mysql_庫 - 它被棄用 - 使用mysqli_庫代替(或PDO)。
  2. 查看準備好的語句的網頁 - http://www.php.net/manual/en/mysqli.prepare.php - 該示例將爲您提供有關如何從SQL注入安全地編寫代碼的模板。