0

私は PHP を初めて使用し、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 プリペアド ステートメントに変換する方法を学ぶと、PDO プリペアド ステートメントの方が簡単で安全であることに感謝していますが、私がやっていることで物事がより安全になっているのかどうか疑問に思っていました。

4

1 に答える 1

1
  1. mysql_ ライブラリの使用を停止します - これは非推奨です - 代わりに mysqli_ ライブラリ (または PDO) を使用してください。
  2. プリペアド ステートメントの Web ページを参照してください - http://www.php.net/manual/en/mysqli.prepare.php - この例では、SQL インジェクションから安全なコードを作成する方法のテンプレートが提供されます。
于 2013-03-14T11:52:30.197 に答える