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準備好的聲明,當我學會將當前的查詢翻譯成它們時,它更容易也更安全,但我只是想知道我正在做的是讓事情更安全還是不安全?
'mysql_'代碼很快就會被棄用,原因很多,安全就是其中之一。我強烈建議你看看mysqli:http://us2.php.net/manual/en/mysqli.overview.php – Andy 2013-03-14 11:50:47
[**請不要在新代碼**中使用'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
@Andy是否也讓mysqli使事情變得更加安全,還是隻跟上最佳實踐? – TryingToBeZen 2013-03-14 11:53:53